在沒有遞歸或平衡組的情況下匹配嵌套括號
使用正則表達式匹配嵌套括號可能具有挑戰性,特別是在像Java 這樣的語言中,其中遞歸且不支援平衡組。幸運的是,使用前向引用確實可以克服此限制。
匹配外部組
以下正則表達式[1] 匹配外部組括號而不對深度施加限制:
(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).) ?.*?(?=\1)[^(]*(?=\2$)
這裡,表達式向前查找左括號,排除不匹配的左括號,並捕獲相應的右括號。捕獲的子字串雖然無用,但可以作為佔位符來完成匹配。 ]
匹配內部組要包含內部組,我們可以捕獲以下表達式
[2]:(?=\()( ?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(? !.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))
(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).) ?.*?(?=\2)[^(]*(?=\3$)))Description
(?=()斷言'(' 優先於複雜解析
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3