2013-01-02 59 views
0

我使用的,如果類型(if\()(.*)(?!\{)正則表達式查找所有的「如果」沒有聲明「{」

似乎並不奏效......

例子:

if((Collection.containsKey(primaryKeyValue))) {

此外,我要排除else if

+3

正則表達式不是真正的票。如果你有例如Perl或Python,你可以在整個文件中使用他們對字符串的多行regex支持,但是你也可以爲'if'語句定義一個簡單的解析器,或者爲你的目標語言找到一個語法。 – tripleee

+1

你的課程是什麼? perl(或任何PCRE)? VI? Emacs的? JavaScript的? – dan3

回答

3

此正則表達式匹配(大部分時間)if聲明,沒有使用{;結束:

\bif\s*\([^\{]+; 

\b是字邊界,以確保如果是單獨的,而不是另一個詞的一部分等ZIF)。

但是,這個正則表達式是不可靠的。其實,任何正則表達式解決方案在這裏不能100%可靠,因爲您匹配的字符可以存在於if條件內的字符串中。

考慮這個例子 - 它不會通過上述正則表達式,而這顯然是罰款由您的規則:

if (s.equals(";{;};")) { t="({;})"; } 

而且它會通過這個例子,這是不對您的規則:

if (s.equals("{;}")) t="({;})"; 

如果你想在這裏堅如磐石的表現,你必須編寫你自己的代碼解析器。

+0

+1表示何時無法工作:) – exexzian

3

沒有範圍的if需要由;終止。所以你可以在{之前檢查一下if之後是否有;。這個正則表達式應該這樣做:

(if[^{;]*;) 

請注意,這需要多行正則表達式。

相關問題