[PHP-users 13148] Re: 最短一致の置換について

php-users@php.gr.jp php-users@php.gr.jp
Sat, 08 Feb 2003 08:37:00 +0900


宇野さん、松川さん、アドバイスありがとうございました!
SAITO TAKAです。

>   ちょっと意味不明...
> 
>   aとcで囲まれた部分を'a''c'も含めて最短一致で削除(""に置換)ってことなら、

説明が足りなくて、申し訳ありませんでした。
私がやりたいことというのは、ご察しのとおりのことです。

$text = "abc hoge abc";
$return = ereg_replace("a[^ac]+c","",$text);
print($return);

これも考えたのですが、上の例でいうところのaとcが、
一文字ではなく複数文字にわたる場合でつまづいてしまいました。
( ) でグループ化したところに ^ を使えば成功すると思ったのですが、
グループ化した文字列に ^ をかける方法がわかりません。


【<!--start-->と<!--end-->の範囲をこれも含めOKに置換】

$text = "<!--start-->あああ<!--end--> <!--start-->hoge<!--end-->";
$return = ereg_replace("<!--start-->[^(<!--)]+<!--end-->","OK",$text);
print($return);

上の例ですと、「OK」が2つ表示されて成功なのですが、

$text = "<!--start-->あ!ああ<!--end--> <!--start-->ho-ge<!--end-->";

とすると、失敗してしまいます。
[^(<!--)]
も
[^<!--]
と認識されてしまうのですね。

グループ化した文字列に対して ^ をかける方法について、
ご存知の方がいましたら、どうか教えてください。