初めまして。
PHPの正規表現にて、どうしてもわからない点があり、質問させていただきます。
例えば下記のようなテキストがあったとします。
dummy(1+1), dummy(2+(34)), dummy(5-dummy(67))
この時、dummy(数式)をマッチさせて取り出したいと思っているのですが、
この時の$patternの設定がうまくいきません。
というのも、dummy(dummy())となっている入れ子構造における、閉じ括弧の指定が希望通りに出来ないのです。
$str = "dummy(1+1), dummy(2+(3*4)), dummy(5-dummy(6*7))"; $pattern = "/(dummy\()([0-9 \(][0-9\+\-*\/\(\) ]+[0-9\) ])(\))/"; preg_match_all($pattern,$str,$match);
こうすると、$match[0]は以下のようになります。
Array ( [0] => dummy(1+1) [1] => dummy(2+(3*4)) [2] => dummy(6*7)) )
この時、
[2] => dummy(6*7))
の2つ目の括弧が不要なのです。
この括弧は上位のdummyの閉じ括弧となるため、こちらはマッチさせたくないのですが、現在の$patternではマッチしてしまいます。
希望としては、
Array ( [0] => dummy(1+1) [1] => dummy(2+(3*4)) [2] => dummy(6*7) )
上記のようにマッチをさせたいのですが、どのように$patternを設定するべきでしょうか。
再帰的パターンという記事 http://php.net/manual/ja/regexp.reference.recursive.php も確認したのですが、理解が足らず、応用できませんでした。
ご教示の程、宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/11 13:48