精确平衡括号匹配的正则表达式
本文解决了使用正则表达式准确匹配平衡括号的挑战,特别是在函数调用的上下文中(例如 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)(?!))
确保如果堆栈(“open”)最后不为空,则匹配失败,从而保证函数调用中括号的平衡。 这种方法有效地限制了与预期函数调用的匹配。
以上是正则表达式如何准确匹配特定函数调用中的平衡括号?的详细内容。更多信息请关注PHP中文网其他相关文章!