我已經使用了很多它,但我找不到任何解決方案。 對於學校項目,我需要在字符串中找到不受支持的字符不支持的字符。 允許是[A-Z\s]
。搜索正則表達式模式來查找「禁止」字符
我發現Pattern.match()
只檢查整個字符串是否匹配模式。 所以我試過這種模式:.*[^A-Z\\s].*
只要你沒有在字符串中有任何換行符,它就會工作。爲了檢查它們,我也使用了[.\\s]*[^A-Z\\s][.\\s]*
來處理它們,但現在沒有任何工作了。
這將是什麼正確的正則表達式?
我已經使用了很多它,但我找不到任何解決方案。 對於學校項目,我需要在字符串中找到不受支持的字符不支持的字符。 允許是[A-Z\s]
。搜索正則表達式模式來查找「禁止」字符
我發現Pattern.match()
只檢查整個字符串是否匹配模式。 所以我試過這種模式:.*[^A-Z\\s].*
只要你沒有在字符串中有任何換行符,它就會工作。爲了檢查它們,我也使用了[.\\s]*[^A-Z\\s][.\\s]*
來處理它們,但現在沒有任何工作了。
這將是什麼正確的正則表達式?
或者:
[四處SO缺陷 - 無法引用
final Pattern p = Pattern.compile("[^A-Z\\s]");
if (p.matcher(input).find())
// illegal input, bark
是,.matches()
是名不副實的代碼之後列表項] ...真正的正則表達式米在Java中使用.find()
來完成。
嘗試"(?s).*[^A-Z\\s].*"
它打開dotall模式。在dotall模式下,表達式.
匹配任何字符,包括行結束符。默認情況下,該表達式不匹配行結束符。請參閱Pattern.API(?idmsuxU-idmsuxU)
+1對於您的解決方案,但我不同意「真正的Java正則表達式匹配使用'find()'部分完成,這些只是兩種不同的方法Matcher。'matches'試圖匹配'模式'對整個輸入的匹配,'find'試圖在輸入內匹配它。語義... – Mena
m)謝謝你的作品。爲什麼我沒有提出這個想法?感謝.find()我用你的第一個建議。'if(!Pattern.matches(「[AZ \\ s] *」,inputstr))' – s3lph
@Mena no,不是語義,35年以上的正則表達式。和Java是兩種主流的正則表達式語言,拒絕承認「正則表達式匹配」的意思。見證這個錯誤的人困惑的人數 – fge