[PHP-users 1720] Re: php-4.0.6 + php4_mbregex-1.2.1 での mbereg_replace のグローバルオプション?

Osamu Shigematsu php-users@php.gr.jp
Mon, 03 Sep 2001 11:12:04 +0900


重松です。

php というよりも、むしろ正規表現の文法かと。

> 具体的には、
> デリミタを'<<'と'>>'にして挟まれた文字を'○○○'とかに置き換えたい。
> 
> mbereg_replace("[\<]{2}.*[\>]{2}","○○○",$HENSUU);
> 
> $HENNSUU を 
> 
> "きょうの天気は<<雨>>だけど明日は<<晴れ>>だといいな"
> 
> とすると、上記の変換式ですと、
> 
> "きょうの天気は○○○だといいな"
> 
> とい具合に初めと終わりのパターンしか認識されません。
> 
> どなたか良い方法がありましたら、教えてください。
> 最終手段はループで1文字づつ確認してゆく方法も考えられますが、
> 可能であればコマンド1つで解決したいです。

正規表現では、最も長くなるようにマッチさせようとするので、上記の例だと、

    <<雨>>だけど明日は<<晴れ>>

までがマッチします。

なので、単純に、<<>> の間に含める文字を限定してアルファベットと数字だとか、>
や < を含めないということならば、"[<]{2}[A-Za-z0-9_]*[>]{2}" としても良いで
すし、"[<]{2}[^<>]*[>]{2}" でも良くないですかね?

<?php

$msg = "きょうの天気は<<雨>>だけど明日は<<晴れ>>だといいな<br>";
print mbereg_replace("[<]{2}.*[>]{2}","○○○",$msg);
print mbereg_replace("[<]{2}[^<>]*[>]{2}","○○○",$msg);

?>

私の所ではうまくいきますけど。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/
mailto:shige@ravi.ne.jp