」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?

嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?

發佈於2024-11-06
瀏覽:220

Can Nested Brackets Be Matched Without Recursion or Balancing Groups?

在沒有遞歸或平衡組的情況下匹配嵌套括號

使用正則表達式匹配嵌套括號可能具有挑戰性,特別是在像Java 這樣的語言中,其中遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。

匹配外部組

以下正則表達式[1] 匹配外部組括號而不對深度施加限制:

(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).) ?.*?(?=\1)[^(]*(?=\2$)

這裡,表達式向前查找左括號,排除不匹配的左括號,並捕獲相應的右括號。捕獲的子字串雖然無用,但可以作為佔位符來完成匹配。 ]

匹配內部組

要包含內部組,我們可以捕獲以下表達式

[2]

:(?=\()( ?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(? !.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))

(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$))) 
Description

(?=()

斷言'(' 優先於複雜解析

(?: (?=斷言下一個'('跟隨在?((?!.?\1)(.)(?!..?)(?!.(.*))使用單一字元繼續配對組重複組(在內循環)匹配並包括找到的最後一個“(”1此方法允許高效匹配嵌套括號,而無需用於遞歸或平衡組。
重複字串處理的非捕獲組的開始
.
匹配直到下一個'(' 後面不跟有組1
\2).*用字串填充第1 組,確保另一個')' 存在
)斷言匹配的')' 有效
]?\2)斷言組2 後面不存在下一個')'
用剩餘的字串填充組2
斷言匹配的')' 有效
) ?
.*?(?=\ 1?(?=\ 1? )
*(?=\2 $) 匹配到最後一個')'(但在有效組內)
(
版本聲明 本文轉載於:1729740015如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3