使用正規表示式驗證平衡括號
雖然正規表示式很強大,但僅使用正規表示式完美平衡括號本質上是困難的。 但是,我們可以建立一個正規表示式,可以有效驗證特定上下文中的平衡括號。 下面的方法示範了一個方法:
用於括號驗證的正規表示式:
<code>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)(?!)) # Fails if 'open' stack is not empty \) # Closing parenthesis</code>
工作原理:
此正規表示式利用平衡組(在許多正規表示式引擎中可用,但並非全部)。
(?<open> ( )
和 (?<-open> ) )
使用命名捕獲組。 (?<open> ...)
將符合的左括號加入名為「open」的堆疊中。 (?<-open> ...)
從「開放」堆疊中移除符合的右括號。 (?(open)(?!))
是條件式。它檢查“打開”堆疊是否為空。如果不為空(括號不平衡),則整個匹配失敗。 範例:
給定輸入字串:"test -> funcPow((3),2) * (9 1)"
正規表示式正確地將 "funcPow((3),2)"
辨識為平衡括號表達式。 它不會匹配"funcPow((3),2) * (9 1)
,因為外括號不平衡。
限制:
此正規表示式僅適用於與函數呼叫直接相關的括號(由 func([a-zA-Z_][a-zA-Z0-9_]*)
定義)。 不處理括號內的巢狀函數呼叫。 為了在複雜的巢狀結構之間實現真正強大的括號平衡,通常需要基於非正規表示式的方法(例如基於堆疊的演算法)。
以上是正規表示式能否有效平衡括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!