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

komura komura @ ma9.seikyou.ne.jp
2003年 12月 16日 (火) 17:13:57 JST


komura です。

既に解決されているようですが、他の方法を思いつきましたので投稿します。


On Tue, 16 Dec 2003 13:38:24 +0900
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp> wrote:

> 基本的なことだと思うのですが、ちょっと効率の良い方法が思いつかないので、
> アドバイスをいただければと思います。
> 
> [[title:utl]] という文字列を <a href="url">title</a> に置換したいと思い
> ます。

一文が長くなるので折り返していますが、
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 );


> mb_ereg_match だとオプションを指定できるようですが、mb_ereg, mb_split だ
> とオプションが特に指定できないように思うのですが、設定することは可能でしょ
> うか?

mb_regex_set_options() を使えば正規表現のオプションについては指定が
可能です。

http://jp.php.net/manual/ja/function.mb-regex-set-options.php


> 後、上記ですが、思いっきり意味不明な表現ですが、pcre (preg_xxx) だと、
> 空の正規表現なども使えるのに、mb_ereg だと駄目で、ちょっと不便、使える方
> 法があれば知りたい、という意味でした。

$array = preg_split( '//', $str );

と同様の結果が欲しいということでしょうか?
同じではないのですが、それに近い処理として、以下のような方法を使ったことが
あります。

$array = explode( "\n", mb_ereg_replace( '(.)', "\\1\n", $str ) );

-- 
komura <komura @ ma9.seikyou.ne.jp>


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