首頁 > 後端開發 > C++ > 正規表示式能否有效平衡括號?

正規表示式能否有效平衡括號?

Mary-Kate Olsen
發布: 2025-01-16 14:48:11
原創
901 人瀏覽過

Can Regular Expressions Effectively Balance Parentheses?

使用正規表示式驗證平衡括號

雖然正規表示式很強大,但僅使用正規表示式完美平衡括號本質上是困難的。 但是,我們可以建立一個正規表示式,可以有效驗證特定上下文中的平衡括號。 下面的方法示範了一個方法:

用於括號驗證的正規表示式:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板