ls拡張 階層下の特定パターンを列挙

バージョン1.4以降
投稿者zume?
状態完了
投稿日2005-02-02 (水) 20:53:36

メッセージ

A/B/C
A/B/Z
A/C/Y
A/C/Z

とページがある時に、Zをパターンに指定して

A/B/Z
A/C/Z

を抜き出してlsしてくれるプラグインが欲しいです

コメント

  • lsをいい加減に改造 -- 2005-02-02 (水) 21:32:56
    --- ls.inc.php.orig  Sat Jul 31 12:09:20 2004
    +++ ls.inc.php  Wed Feb  2 21:19:20 2005
    @@ -17,7 +17,10 @@
       if (func_num_args())
       {
         $args = func_get_args();
    -    $with_title = in_array('title',$args);
    +    if ( $args[0] == 'title' ) {
    +      $with_title = TRUE;
    +      array_shift($args);
    +    }
       }
     
       $prefix = $vars['page'].'/';
    @@ -25,7 +28,8 @@
       $pages = array();
       foreach (get_existpages() as $page)
       {
    -    if (strpos($page,$prefix) === 0)
    +    if (strpos($page,$prefix) === 0 &&
    +          preg_match('/'.$args[0].'/', $page))
         {
           $pages[] = $page;
         }
    パターンは正規表現で指定します &bigsmile;
  • おぉ、できました!!
    念のためにls_modという別プラグインにしました。欲を言うとls2,ls2_1などのプラグインでも正規表現が使えるようになるとウハウハなのです。が、無理か。。 -- zume? 2005-02-03 (木) 09:33:13
  • 全然無理じゃないですが、アンケートをとったところ現状がお好みのようでしたので。現状の動作をさせるのに毎回 ^ をつけないといけなくなるのが嫌なんですよね。あー、でも上のやつのは現状指定にさらに正規表現マッチをさせているのか。うーん、それならありなのかな、でも無駄といえば無駄だよね。 -- sonots 2005-02-03 (木) 16:37:20
  • 確かに無駄です。
    しかし、表示ページとオプションから正規表現を 作ってpreg_match一発にすると、全ページに対してpreg_matchが 実行されるのに対し、↑において全ページに対して行われるのは、 オリジナルと同じく preg_matchよりは*1コストの低い*2strposのみです。 また、この方が改造が単純で分かり易いことも+に評価して欲しいですね。
    馬鹿っぽいものにも、それなりの言い訳があるのですよ。&worried; -- 2005-02-03 (木) 18:46:41
    • んー無駄ではないですよ。機能が増えているのですから。無駄といえば無駄なわけですが、やはり無駄ではないです。結局自分もこうすることにしましたし。-- sonots 2005-02-06 (日) 17:33:41
  • 私はlsやその拡張プラグインでは正規表現を使いたい人です。lsの拡張方法を教えていただいた方には非常に感謝しています。あくまで例ですが、
    • RPG/ゲームA/攻略
    • RPG/ゲームB/攻略
    • ACT/ゲームC/攻略
    • ACT/ゲームC/共通
      みたくに階層化しているので、攻略情報だけ並べてみたい・・・。という欲求に駆られていたのです。他のls拡張でも使いたいなぁ~・・ls(パターン,regexp=true)みたくにするのは駄目ですかね -- zume? 2005-02-03 (木) 20:06:40
  • ああ、メッセージのとこでAが共通だから「lsの出力から」抜き出したいのかと勘違いしていました。
    --- ls.inc.php.orig  Sat Jul 31 12:09:20 2004
    +++ ls.inc.php  Thu Feb  3 21:56:16 2005
    @@ -12,20 +12,17 @@
     {
       global $vars;
     
    -  $with_title = FALSE;
    +  list( $pattern, $with_title) = func_get_args();
     
    -  if (func_num_args())
    +  if (!$pattern)
       {
    -    $args = func_get_args();
    -    $with_title = in_array('title',$args);
    +    $pattern = '^'.preg_quote($vars['page'].'/', '/');
       }
     
    -  $prefix = $vars['page'].'/';
    -
       $pages = array();
       foreach (get_existpages() as $page)
       {
    -    if (strpos($page,$prefix) === 0)
    +    if ( preg_match('/'.$pattern.'/', $page))
         {
           $pages[] = $page;
         }
    こんなとこで -- 2005-02-03 (木) 22:01:46
  • ls2_1 改良しました。filter オプションで指定することにしました。regexp=true の場合はパターンを正規表現でかけるという案は、ls2_1 の内部でパターンの文字列をそのまま利用していたりするため、うまい実装が思いつかなくて無利でした。申し訳ない。#ls2_1(/,filter=正規表現) とすれば正規表現指定と同じ意味になります。 -- sonots 2005-02-06 (日) 17:33:41
  • おおぉ、皆さんありがとうございました!すばらしい!! -- zume? 2005-02-07 (月) 09:15:34


*1 その程度はともかくとして
*2 と期待される

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-07-17 (日) 21:05:33
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u8. HTML convert time: 0.408 sec.

OSDN