在沒有遞歸或平衡組的情況下匹配嵌套括號
使用正則表達式匹配括號可能具有挑戰性,嵌套特別是在像Java 這樣的語言中,遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。
匹配外部群組
以下正規表示式[1] 符合外部群組括號而不對深度施加限制:
這裡,表達式向前查找左括號,排除不匹配的左括號,並捕獲相應的右括號。捕獲的子字串雖然無用,但可以作為佔位符來完成匹配。
匹配內部組
要包含內部組,我們可以捕捉以下表達式 [2]:
[2]
:透過新增擷取群組並調整反向引用索引,此表達式也會擷取內部群組。
工作原理Component | Description |
---|---|
(?=() | Asserts that '(' precedes complex parsing |
(?: | Start of non-capturing group for repeated string processing |
(?= | Assert that the next '(' follows |
.?((?!.?1) | Match until the next '(' not followed by group 1 |
(.)(?!.2).* | Fill group 1 with the string, ensuring another ')' exists |
) | Assert that the matching ')' is valid |
.?)(?!.?2) | Assert that the next ')' not followed by group 2 exists |
(.*) | Fill group 2 with the remaining string |
) | Assert that the matching ')' is valid |
Consume a single character to continue matching within the group | |
) ? | Repeat the group (in the inner loop) |
.*?(?=1) | Match up to and including the last '(' found |
1*(?=2$) | Match up to the last ')' (but within the valid group) |
此方法可以有效率地匹配巢狀括號,無需遞歸或平衡組。
以上是嵌套括號可以在沒有遞歸或平衡組的情況下匹配嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!