私は例えば、ネストされた括弧にマッチする正規表現を記述しようとしています:、このような文字列が一致する必要があります入れ子になった括弧に一致する再帰正規表現を書くには?
"(((text(text))))(text()()text)(casual(characters(#$%^^&&#^%#@!&**&#^*[email protected]#^**_)))"
すべてのネストされた括弧ではなく、閉じている原因:
"(((text)))(text)(casualChars*#(!&#*(!))"
べきではありません少なくとも最初の "(((text)))(text)"部分と一致する必要があります。
$regex = '/(( (\() ([^[]*?) (?R)? (\)) ){0,}) /x';
しかし、私は期待していて、それが正しく動作しません:
実は、私の正規表現です。それを修正するには?どこが間違っていますか?ありがとう!
これを再帰的に行うために必要なSQL用のパーサーを作成しました。 regexだけで再帰的にこれをやろうとするよりも、regexで再帰関数を持つほうがずっと簡単です。 – EdgeCase
あなたは間違ったツリーを吠えている、純粋に正規表現の解決策は、おそらく過度に複雑で、維持するのが難しいでしょう。文字列を再帰的に解析するほうがよいでしょう。 – GordonM
Do not ... OK、理論的にはそれはできますが、あなたがそれをすると、それはおそらく幻想的に見えます。ああ、正規表現のバグを見つけましたか?アー...どうしたの?ああ、私たちもブラケットのサポートを追加する必要があります!アーン...どうやって追加しますか?私はあなたに言う、あなたはより人間が読めるパーサーを使うのがよい。あなたがこれを尋ねているという事実は、とにかくそれを維持することはおそらく不可能であることを示しています。 – Theraot