[英]regex problems matching pattern
我的正則表達式並沒有真正做到我想要的。 它需要在我的文本文件中找到所有以行開頭的匹配項:
func anyword() {
模式將執行此操作,但是我希望它在下一個}
停止。 但是,如果出現以下一種或多種情況:
SomeFunction();
應該跳過下一個}
。
這是它將掃描的文本的示例。 每行都帶有注釋,以顯示該怎么做:
override func something() { // here is a start pattern
// still looking for an }
halloworld() { }; // bracket } found but is ignored because line also contains "()"
// still looking for an }
// still looking for an }
} // found closing bracket } end of match
這是我當前正在使用的模式:
\w+\s+func\s\w+\(\)\{\s+(.*?)\s+\}
也許是利用.NET平衡組 (以處理那些令人討厭的嵌套,未知級別的{}
事物{}
:
\bfunc\s*\w+\([^)]*\)\s*{(?:[^{}]|(?<Open>{)|(?<-Open>}))*(?(Open)(?!)\}
最酷的部分是(?:[^{}]|(?<Open>{)|(?<-Open>}))*(?(Open)(?!)
譯為:吃一個非{}
,或吃{
,最后是}
(三向交替的第三個選項)(注意減號,名稱無關緊要),這會彈出堆棧並“關閉”該組。由於*
,模式可以自由匹配盡可能多的次數,但是任何{
都必須用相同數量的}
進行匹配,否則模式將通過最后一個條件(通過檢查“打開”組以及是否通過它仍然保留所有匹配項,並執行空的超前保證,以確保整個操作失敗。
如果只存在一個嵌套括號,則此模式應該適用於您:
\w[\w\s]+func[\w\s()]+({(?:[^{}]*|[\w\s();]*?{[\w\s();]*?}[\w\s();]*?)*})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.