[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