phpでの正規表現 貪欲でなくなれ 2007/04/30

極論をいいますと、プログラムというのはテキストの置き換えだと思います。置き換えて置き換えて、置き換えて結果がでてくるなにかです。

phpでの正規表現パターンに使用可能な修飾子に、U (PCRE_UNGREEDY)というのがあります。
これは、

この修飾子を設定すると、量指定子の「貪欲さ」が反転します。 つまり、量指定子は、デフォルトで貪欲でなく、 疑問符を後ろに付けてはじめて貪欲になるようになります。phpマニュアル


というものです。

シナリオ:
テキストから[[]]でくくられた文字列から[[]]をとりのぞく。

を行いたいときに、


function test_clean_link2(){
$line = '[[aaaa bbbb]]cccc ddddd [[eeeee ffff]]gggg hhhh';
$pattern = <<<EOD
/\[\[
(.*)
\]\]/xU
EOD;
$line = preg_replace($pattern, '$1', $line);
echo $line;
}


結果は、
aaaa bbbbcccc ddddd eeeee ffffgggg hhhh
となります。
この結果が欲しい結果です。


もしも、このUをつけないと、
aaaa bbbb]]cccc ddddd [[eeeee ffffgggg hhhh
となります。

一番最後の]]までをマッチさせるからです。

: