我找不到爲什麼我的正則表達式在使用java的String.matches方法時不匹配行 - 它在在線正則表達式測試中使用匹配。爲什麼這個正則表達式不匹配?
這裏是Java的代碼:
line.trim().replaceAll(" +", " ").matches("(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]");
和應匹配行:
bool fLoad) // somecomment
沒有任何人有任何想法,爲什麼會這樣?
我找不到爲什麼我的正則表達式在使用java的String.matches方法時不匹配行 - 它在在線正則表達式測試中使用匹配。爲什麼這個正則表達式不匹配?
這裏是Java的代碼:
line.trim().replaceAll(" +", " ").matches("(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)]");
和應匹配行:
bool fLoad) // somecomment
沒有任何人有任何想法,爲什麼會這樣?
matches()
表示它應該完全匹配完全,即整個串適合RE。 ')'後,您的RE不允許任何內容。嘗試使用find()
代替matches()
。
Java的String.match()
不工作的方式很多其他語言實現:在整個輸入必須要匹配,所以加.*
到您正則表達式的兩端:
line.trim().replaceAll(" +", " ").matches(".*(const)?[a-zA-Z0-9\\*]*\\ [a-zA-Z0-9\\*]*[,|)].*");
我測試了這一點,你的示例行返回true
from matches()
好像你試圖匹配源代碼中的某種變量聲明。
在你的正則表達式,你有這一點,我想是爲了「(可選)數據類型常量」匹配後的部分:
"(const)?[a-zA-Z0-9\\*]*\\ "
是空間的\\
之前故意的嗎?你的意思是匹配一個\
?
該空間是有意的,因爲在數據類型和變量名稱之間的聲明中應該總是有空格。 – mort
但爲什麼你需要空間前的雙反斜槓? –
Thx,這解決了我的問題! – mort