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

为什么不匹配?

4

2 回答 2

10

Java 中的“匹配”表示“匹配整个字符串”:

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

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

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

换句话说^\[.*\],不会匹配,但会 其中找到 [Test]Hi there [Test][Test]Hi there

于 2012-09-12T08:39:57.040 回答
1

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

于 2012-09-12T08:42:44.963 回答