[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 メーリングリストの案内