括弧の正確な一致を実現する正規表現
この記事では、特に関数呼び出し (例: funcPow
) のコンテキスト内で、正規表現を使用してバランスの取れた括弧を正確に一致させるという課題に取り組みます。 標準的な正規表現のアプローチでは、一致を目的の関数呼び出しのスコープに限定できないことがよくあります。
解決策は、より高度な正規表現技術にあります。次の式は、名前付きキャプチャ グループとバランシング グループ構造を使用して、正確な一致を実現します。
<code>var r = new Regex(@" func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, add to 'open' stack | (?<-open> \) ) # Match closing parenthesis, remove from 'open' stack )+ (?(open)(?!)) # Assertion: 'open' stack must be empty \) # Closing parenthesis ", RegexOptions.IgnorePatternWhitespace);</code>
この正規表現は、バランシング グループ メカニズムを使用します。 (?<open> ( )
は、名前付きキャプチャ グループ「open」に左かっこを追加し、スタックのように動作します。 (?<-open> ) )
は、見つかった閉じ括弧ごとに「開き」スタックから括弧を削除します。 条件付き (?(open)(?!))
は、スタック (「オープン」) が最後に空でない場合に一致が失敗することを保証し、関数呼び出し内の括弧のバランスを保証します。 このアプローチは、意図した関数呼び出しへの一致を効果的に制限します。
以上が正規表現はどのようにして特定の関数呼び出し内の釣り括弧を正確に照合できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。