为什么这个正则表达式不匹配?

时间:2012-09-12 08:38:14

标签: java regex

我确信这类问题会在这里发布很多。我有这个正则表达式:

^\[.*\]

应匹配

[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

为什么不匹配?

2 个答案:

答案 0 :(得分:10)

Java中的

"match"表示“匹配整个字符串”:

  

尝试将整个区域与模式匹配。

由于您的正则表达式在最后]之后不接受任何字符,因此它不会“匹配”]之后包含字符的任何字符。

您可以使用find查看字符串是否包含与您的正则表达式匹配的内容(由于您使用^,它仍然必须在开始时锚定)。

换句话说,^\[.*\] 匹配 [Test]Hi there,但它会查找 [Test][Test]Hi there内。

答案 1 :(得分:1)

因为String#match会尝试将正则表达式与整个字符串相匹配。您要找的是Pattern.compile(pat).matcher(str).find(),请参阅Matcher