phpでの正規表現 貪欲でなくなれ
2007/04/30
php
正規表現
極論をいいますと、プログラムというのはテキストの置き換えだと思います。置き換えて置き換えて、置き換えて結果がでてくるなにかです。
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
となります。
一番最後の]]までをマッチさせるからです。
: