2012-09-12 51 views
2

我確定這類問題在這裏發佈很多。我有這樣的正則表達式:爲什麼這個正則表達式不匹配?

^\[.*\] 

應符合

[Test]Hi there 

而且根據RegexPal,它的作用。然而,在這個Java SCCE它沒有:

final String pat = "^\\[.*\\]"; 
final String str = "[Test]Hi there"; 
System.out.println(pat); 
System.out.println(str); 
System.out.println(str.matches(pat)); 

輸出:

^\[.*\] 
[Test]Hi there 
false 

爲什麼它不匹配?

回答

10

在Java中"match"意味着「整個字符串匹配」:

嘗試將整個區域與模式匹配。

自從上次]後您的正則表達式不接受任何字符,它不會「匹配」任何有]後面的字符。

您可以使用find看看如果字符串包含東西是你的正則表達式匹配(它仍然會在一開始就被錨定,因爲你使用^)。

換句話說^\[.*\]比賽[Test]Hi there,但它會發現內[Test]Hi there[Test]

+0

我將模式擴展爲'(?s)^ \ [。* \]。*' –

1

因爲String#match會嘗試將您的正則表達式與整個字符串進行匹配。您要查找的是Pattern.compile(pat).matcher(str).find(),請參閱Matcher

相關問題