我确信这类问题会在这里发布很多。我有这个正则表达式:
^\[.*\]
应匹配
[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
为什么不匹配?
答案 0 :(得分:10)
"match"表示“匹配整个字符串”:
尝试将整个区域与模式匹配。
由于您的正则表达式在最后]
之后不接受任何字符,因此它不会“匹配”]
之后包含字符的任何字符。
您可以使用find
查看字符串是否包含与您的正则表达式匹配的内容(由于您使用^
,它仍然必须在开始时锚定)。
换句话说,^\[.*\]
将不 匹配 [Test]Hi there
,但它会查找 [Test]
在[Test]Hi there
内。
答案 1 :(得分:1)
因为String#match
会尝试将正则表达式与整个字符串相匹配。您要找的是Pattern.compile(pat).matcher(str).find()
,请参阅Matcher。