2017-05-26 48 views
-1

我一直在試圖創建一個正則表達式,它只標識下面的粗體。我試過一些正則表達式規則,但沒有成功。正則表達式來識別java中的「if」場景

如果 _if abcifabc guiif

我不想承認,如果滿(條件){語句} ....

+0

什麼標準來確定是否大膽? – Rahul

+0

您不應該在可以使用特定分析器的地方使用正則表達式,特別是對於複雜的語言(如Java)。快速谷歌搜索將返回一些這些解析器,並且語言本身包含工具來做到這一點 – Aaron

+0

@Aaron我們不知道任務。當然,如果你需要一個強大的方法來處理生產中的代碼,解析器是正確的。但是OP可能會在編輯器中做一些快速的黑客攻擊,或者編寫一個快速腳本來運行一套遵循已知標準的代碼文件。 – 2017-05-26 15:12:50

回答

1

你可以試試下面的正則表達式:

(?:^|\s)if(?:\s) 

img

正則表達式的說明:

NODE  EXPLANATION 
------------------------------------------------------------ 
    (?:  group, but do not capture: 
------------------------------------------------------------ 
    ^  the beginning of the line 
------------------------------------------------------------ 
    |   OR 
------------------------------------------------------------ 
    \s  whitespace (\n, \r, \t, \f, and " ") 
------------------------------------------------------------ 
)   end of grouping 
------------------------------------------------------------ 
    if  'if' 
------------------------------------------------------------ 
    (?:  group, but do not capture: 
------------------------------------------------------------ 
    \s  whitespace (\n, \r, \t, \f, and " ") 
------------------------------------------------------------ 
)   end of grouping 
+0

喜歡解釋的佈局。 – Rahul

+0

考慮到註釋和字符串中可能出現「if」這個詞的頻率,至少在這個答案中看到一個免責聲明是很好的。 – 2017-05-26 15:15:21

1

這將匹配if僅由空格前面:

^\s*if\b 

^ - 固定到行首。

\s* - 匹配零個或多個空格字符(包括空格和製表符)。

\b - 需要一個字邊界。所以它不會匹配iffy

正則表達式不能完全識別編程語言中的關鍵字(因爲完全正確的解決方案需要完全解析語言)。但是,如果代碼遵循典型風格,這應該會很好地捕捉到。

+0

沒錯,我在一個「不使用正則表達式時應該使用解析器」的憤怒,並且錯過了你的免責聲明。我很好,這個答案。 – Aaron

+0

@Aaron,我不明白。這些正則表達式對於評論和類似內容都是安全的(例如,考慮多行註釋字符串)。你不能用正則表達式來覆蓋它。 – steffen

+0

@steffen,這一切都取決於任務。有時你正在做一些快速的黑客攻擊,需要一個快速的黑客解決方案。例如,誰在編碼時不在文本編輯器中使用正則表達式?我一定要說明只有解析器才能完美地完成這項任務。 – 2017-05-26 15:22:51

1

if兩者之間的字邊界:

/\bif\b/ 

但因爲它徘徊無論它們發生的所有if匹配的話要小心(例如評論。)。

+0

考慮到註釋和字符串中可能出現「if」這個詞的頻率,在這個答案中至少可以看到一個免責聲明。 – 2017-05-26 15:15:26

+0

@ dan1111問題很模糊,答案也是如此。對某種編程語言沒有任何暗示。我們可以假設的是,「if」是一個關鍵字,對於使用字界的關鍵字。 – steffen