精確平衡括號符合的正規表示式
本文解決了使用正規表示式準確匹配平衡括號的挑戰,特別是在函數呼叫的上下文中(例如 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中文網其他相關文章!