2009-09-11 49 views
1

我是新來正規表達式,並希望使用一個來搜索我們的源代碼管理,以查找特定枚舉值後的代碼塊中的文本。即:正則表達式 - 如何在特定塊中查找文本?

/(\/{2}\@debug)(.|\s)*?(\/{2}\@end-debug).*/ 
var junk = dontWantThis if (junk) {dont want this} if (**myEnumValue**) **{ var yes = iWantToFindThis if (true) { var yes2 = iWantThisToo } }** 
var junk2 = dontWantThis if (junk) {dont want this} 
var stuff = dontWantThis if (junk) {dont want this} if (enumValue) { wantToFindThis } 
var stuff = iDontWantThis if (junk) {iDontWantThisEither} 

我知道我可以使用(\{(/?[^\>]+)\})找到,如果塊,但我只想要第一個代碼塊無所不包跟隨我在尋找枚舉值。我還注意到使用(\{(/?[^\>]+)\})爲我提供了第一個{和最後的},它不會將隨後的{}分組。

謝謝!

+9

嵌套問題,因爲你不再有一個正規的語法,因此不會用正則表達式解決這個問題 – annakata 2009-09-11 19:32:36

回答

6

正則表達式根本無法處理這種東西。爲此,你需要一個解析器和掃描器。

+1

只看我的舊問題,我最終創建了一個解析器,我今天仍然使用它。謝謝你的回答。 – Tim 2011-11-15 16:07:35

0

正如其他人在暗示,這是數學上是不可能做到與正則表達式(至少一般;你也許能得到它,如果你有非常專業的情況下工作)。如果你想要使用標準的Unix工具,或者只是去Perl,Python,Ruby等等,建立​​你需要的詞法分析,可以嘗試使用lex和awk的組合來獲得想要的結果。

0

雖然嵌套問題,你可以使用回溯和前瞻,有效地算你匹配括號或引號。這不是正則表達式的一部分,但已被添加到許多正則表達式庫中,例如.NET,Perl和Java中的一個;可能更多。我不會建議你走這條路,因爲你會發現從詞法上解析這個更容易。但是,如果你確實嘗試了這個作爲一個快速修復,絕對收集一些測試用例,並通過regexbuddyexpresso運行它們。

相關問題