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