[PHP-users 19352]正規表現置換について

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 12月 16日 (火) 13:38:24 JST


こんにちは。重松です。

基本的なことだと思うのですが、ちょっと効率の良い方法が思いつかないので、
アドバイスをいただければと思います。

[[title:utl]] という文字列を <a href="url">title</a> に置換したいと思い
ます。

$dst = mb_ereg_replace('\[\[(.+?):(.+?)\]\]', '<a href="\2">\1</a>',$src)
でよさそうに思いますが、\1 の部分は htmlspecialchars() に食わせる必要が
あるし、同様に \2 は rowurlencode() に食わせないといけないと思います。

そこで、

$buf = preg_split('/(?=\[\[.+?:.+?\]\])/', $src);
$dst = array_shift($buf);
foreach ($buf as $item) {
	mb_ereg('\[\[(.+?):(.+?)\]\](.*)', $item, $matches);
	$dst .= '<a href="' . urlrowencode($matches[2]) . '">';
	$dst .= htmlspecialchars($matches[1]) . '</a>';
	$dst .= htmlspecialchars($matches[3]);
}

とでもするしかないのか、と思っているのですが、もっと良い方法はないのでしょ
うか?

それから、pcre だと、// といった空の表現や、先の /(?=\[\[.+?:.+?\]\])/ 
のように、位置のみでマッチする文字のない表現で split できないのですが、
これはそういうものでしょうか?

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

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



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