「ls2」プラグインのパターンで正規表現が使いたい

バージョン1.4.X
投稿者ytomi?
状態完了
投稿日2007-03-13 (火) 10:08:02

メッセージ

ページ名による分類をしていますが、既存の「ls2」プラグインは先頭からのパターンのみしか指定できないようです。 これを正規表現で指定できればページ名による分類の幅を持たせることができるので、是非欲しい。 他とえば、以下のようなファイル名分類が利用できたりできますよね。

A-B-XXX
A-C-XXX
B-A-XXX
B-C-XXX

以下のようにして

#ls3(/^[AB]+-C-*/,)
A-C-XXX
B-C-XXX

を選び出す。

 

コメント

  • エラー処理とかは放置ですが、これで正規表現が使えるようになると思います。 -- teanan 2007-03-13 (火) 11:50:46
    --- ls2.inc.php.orig	2004-12-05 20:37:37.000000000 +0900
    +++ ls2.inc.php	2007-03-13 11:46:54.910156800 +0900
    @@ -64,7 +64,8 @@
    		$args   = func_get_args();
    		$prefix = array_shift($args);
    	}
    -	if ($prefix == '') $prefix = strip_bracket($vars['page']) . '/';
    +	if ($prefix == '')
    +		$prefix = '#^' . preg_quote(strip_bracket($vars['page']) . '/', '#') . '#';
     
    	array_walk($args, 'plugin_ls2_check_arg', & $params);
     
    @@ -89,9 +90,7 @@
     
    	$pages = array();
    	if ($prefix != '') {
    -		foreach (get_existpages() as $_page)
    -			if (strpos($_page, $prefix) === 0)
    -				$pages[] = $_page;
    +		$pages = preg_grep($prefix, get_existpages());
    	} else {
    		$pages = get_existpages();
    	}
  • 自作プラグイン/lsx.inc.php filter -- 2007-03-13 (火) 12:49:33
  • 標準に「ls2」を使っているところも「/.../」の正規表現にする必要は在りましたが、teananさんの修正で一応出来ました。有難うございます。
    filterさんの新しいプラグインは「filter=」で正規表現をオプションとして指定するんですよね。
    ちょっと、標準の「ls2」と違う感じだったので今回はteananさんのはパスさせてください。
    有難うございました。 -- ytomi? 2007-03-13 (火) 15:05:15
    • あ、互換性ないからマズイですね (^^; -- teanan 2007-03-13 (火) 22:02:10
  • 中身を精査していなくてすいません。正規表現を生のままユーザーに扱わせてしまうと、PerlだとPerlが実行できてしまったりするし、PHPでは少なくともcompilation error を発生させることができてしまいます*1。例えば "/[]/" 。まだテストコードは消さずに手元にありますか > teananさん 回避できているなら気にしません -- henoheno 2007-03-13 (火) 21:07:14
    Warning: preg_match() [function.preg-match]: Compilation failed:
    missing terminating ] for character class at offset 2 in XXX on line NNN
    • その辺、全く頭にありませんでした。ツッコミありがとうございます (^^; 安全にユーザーに扱わせるためにはどうしたら良いんでしょうね・・・ -- teanan 2007-03-13 (火) 22:05:05
    • 正規表現は乱暴に使わせるためには作られていないので、厳格なエラーや深刻なトラブルを簡単に発生させる事ができてしまいます。それゆえに、第三者に使わせてはいけないものであるはずです。正規表現風の記法を組み込みたいならば、許可したいものどもを一つ一つ、論理的に安全かつ適当に*2処理するラッパーを組んであげる事になるでしょう。余談ですがcvs:lib/spam.php の generate_glob_regex() は、file globbing (* が任意の文字、ワイルドカードとかのあれ)を正規表現に落とす関数なので、似たような問題を抱えています。というか、そのあたりをきちんと作るのが面倒なのと、まだspam.phpでしか使っていない、という状況に甘えており、実装が適当です。 -- henoheno 2007-03-13 (火) 23:47:11

*1 remote exploitableとか言うのでしょうか
*2 上のcompilation error などを出さないでソフトに回避する感じの

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-20 (金) 01:59:35
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2018 PukiWiki Development Team. Powered by PHP 5.6.39-0+deb8u1. HTML convert time: 0.391 sec.

OSDN