2011-07-06 100 views
1

我找不到爲什麼我的正則表達式在使用java的String.matches方法時不匹配行 - 它在在線正則表達式測試中使用匹配。爲什麼這個正則表達式不匹配?

這裏是Java的代碼:

line.trim().replaceAll(" +", " ").matches("(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]"); 

和應匹配行:

bool fLoad) // somecomment 

沒有任何人有任何想法,爲什麼會這樣?

回答

4

matches()表示它應該完全匹配完全,即整個串適合RE。 ')'後,您的RE不允許任何內容。嘗試使用find()代替matches()

+0

Thx,這解決了我的問題! – mort

1

Java的String.match()不工作的方式很多其他語言實現:在整個輸入必須要匹配,所以加.*到您正則表達式的兩端:

line.trim().replaceAll(" +", " ").matches(".*(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)].*"); 

我測試了這一點,你的示例行返回true from matches()

1

好像你試圖匹配源代碼中的某種變量聲明。

在你的正則表達式,你有這一點,我想是爲了「(可選)數據類型常量」匹配後的部分:

"(const)?[a-zA-Z0-9\\*]*\\ " 

是空間的\\之前故意的嗎?你的意思是匹配一個\

+0

該空間是有意的,因爲在數據類型和變量名稱之間的聲明中應該總是有空格。 – mort

+0

但爲什麼你需要空間前的雙反斜槓? –

相關問題