2014-02-23 49 views
0

我使用以下正則表達式:[a-zA-Z] +來檢測字符串是否包含文本,但在Java 1.7中失敗。 它在Notepad ++中起作用。 我錯過了什麼?如何使用正則表達式在Java中檢測可讀文本?

String message = "123 foo 567"; 
if (message.matches("[a-zA-Z]+")) { 
    System.out.println("Success"); 
} else 
    System.out.println("Fail"); 

"foo" --> Success 
"123 foo" --> Fail 
"foo 456" --> fail 
+0

這檢查字符串_matches_的正則表達式,而不是它是否包含它的實例。請參閱http://stackoverflow.com/q/15130309/1348195 –

回答

2

從Java API規範上Matcher.matches()

返回:
當且僅當整個區域的序列匹配此匹配器模式

(重點是我的)。這就好像你在Notepad ++中用^...$包裝你的表達。

改爲使用Matcher.find()

+0

感謝您的指針。如果在String.matches的文檔中提到這個細微特徵,那將會很不錯。 – ckielstra

+0

是的,他們有點錯過了。在內部,'String.matches'使用'Matcher.matches()',如果你知道你可以建立連接...... BUt大多數人不會閱讀源代碼來獲取它。 –

1

獲取String.matches的另一種方法是在部分字符串上工作,而不是整個字符串,您可以在匹配字符串的開始和結尾處添加*以撤銷^ ... $的效果,如:.*[a-zA-Z]+.*

相關問題