[PHP-users 19365]Re: 正規表現置換について

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 12月 16日 (火) 17:43:22 JST


重松です。
komura さん、こんにちは。
コメントくださって、ありがとうございます。

> 一文が長くなるので折り返していますが、
> mb_ereg_replace() であれば、以下でも可能だと思います。
> 
> $dst = mb_ereg_replace(
>       '\[\[(.+?):(.+?)\]\]',
>       '"<a href=\"".rawurlencode("\2")."\">".htmlspecialchars("\1")."</a>"',
>       $src, "e" );
> 
> preg_replace() でも、以下のようにすれば、同じだと思います。
> 
> $dst = preg_replace(
>       '/\[\[(.+?):(.+?)\]\]/e',
>       '"<a href=\"".rawurlencode("\2")."\">".htmlspecialchars("\1")."</a>"',
>       $src );

どこかで見たような記憶があって、

$dst = preg_replace(
	'/\[\[(.+?):(.+?)\]\]/',
	 "<a href=\"".rawurlencode("\2")."\">".htmlspecialchars("\1")."</a>",
	$src);

としましたが、単に 0x00, 0x02 の文字になってしまいました。

全体をクオートして PHP スクリプトとして評価させる e というオプションは
知りませんでした。今後楽ができそうです。

> $array = preg_split( '//', $str );
> 
> と同様の結果が欲しいということでしょうか?

そうですが、厳密に言えば、同じ答えが得たいというよりも、// とか
/(?=なにか)/ とか /\b/ などを preg_split で切ることはできるんですが、
mb_split では、切ることができないので、オプションにより何とかなるのか、
と思った次第です。

pcre のパターン修飾子は一覧を見つけることができたのですが、
( http://jp.php.net/manual/ja/pcre.pattern.modifiers.php )
mb_ereg のオプションの一覧を見つけられないのですが、
どこかに一覧はありますか?

> 同じではないのですが、それに近い処理として、以下のような方法を使ったことが
> あります。
> 
> $array = explode( "\n", mb_ereg_replace( '(.)', "\\1\n", $str ) );

これも参考になります。
mb_ereg でできなくて、かつ、pcre が使えない場合にこれでしのげます。

-- 
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>



PHP-users メーリングリストの案内