**ls拡張 階層下の特定パターンを列挙 [#qaf24803] |RIGHT:70|LEFT:410|c |~バージョン|1.4以降| |~投稿者|[[zume]]| |~状態|提案| |~状態|完了| |~投稿日|&new{2005-02-02 (水) 20:53:36};| ***メッセージ [#d8e5b151] A/B/C A/B/Z A/C/Y A/C/Z とページがある時に、Zをパターンに指定して A/B/Z A/C/Z を抜き出してlsしてくれるプラグインが欲しいです ***コメント [#af507a34] -lsをいい加減に改造 -- &new{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; -おぉ、できました!!&br;念のためにls_modという別プラグインにしました。欲を言うとls2,ls2_1などのプラグインでも正規表現が使えるようになるとウハウハなのです。が、無理か。。 -- [[zume]] &new{2005-02-03 (木) 09:33:13}; -全然無理じゃないですが、アンケートをとったところ現状がお好みのようでしたので。現状の動作をさせるのに毎回 ^ をつけないといけなくなるのが嫌なんですよね。あー、でも上のやつのは現状指定にさらに正規表現マッチをさせているのか。うーん、それならありなのかな、でも無駄といえば無駄だよね。 -- [[sonots]] &new{2005-02-03 (木) 16:37:20}; -確かに無駄です。~ しかし、表示ページとオプションから正規表現を 作ってpreg_match一発にすると、全ページに対してpreg_matchが 実行されるのに対し、↑において全ページに対して行われるのは、 オリジナルと同じく preg_matchよりは((その程度はともかくとして))コストの低い((と期待される))strposのみです。 また、この方が改造が単純で分かり易いことも+に評価して欲しいですね。~ 馬鹿っぽいものにも、それなりの言い訳があるのですよ。&worried; -- &new{2005-02-03 (木) 18:46:41}; --んー無駄ではないですよ。機能が増えているのですから。無駄といえば無駄なわけですが、やはり無駄ではないです。結局自分もこうすることにしましたし。-- [[sonots]] &new{2005-02-06 (日) 17:33:41}; -私はlsやその拡張プラグインでは正規表現を使いたい人です。lsの拡張方法を教えていただいた方には非常に感謝しています。あくまで例ですが、~ --RPG/ゲームA/攻略 --RPG/ゲームB/攻略 --ACT/ゲームC/攻略 --ACT/ゲームC/共通~ みたくに階層化しているので、攻略情報だけ並べてみたい・・・。という欲求に駆られていたのです。他のls拡張でも使いたいなぁ~・・ls(パターン,regexp=true)みたくにするのは駄目ですかね -- [[zume]] &new{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; } こんなとこで -- &new{2005-02-03 (木) 22:01:46}; -[[ls2_1>自作プラグイン/ls2_1.inc.php]] 改良しました。filter オプションで指定することにしました。regexp=true の場合はパターンを正規表現でかけるという案は、ls2_1 の内部でパターンの文字列をそのまま利用していたりするため、うまい実装が思いつかなくて無利でした。申し訳ない。#ls2_1(/,filter=正規表現) とすれば正規表現指定と同じ意味になります。 -- [[sonots]] &new{2005-02-06 (日) 17:33:41}; -おおぉ、皆さんありがとうございました!すばらしい!! -- [[zume]] &new{2005-02-07 (月) 09:15:34}; #comment