0

String.matches给出不同的结果(我认为它有充分的理由,但我不知道为什么)。

请参阅下面的示例:

复杂程序:

...
line.matches(pattern) -> false
...

简单的程序:

String line = "blabla"; //copy pasted during debug of Complex program
String pattern = "bl.*"; //copy pasted during debug of Complex program

line.matches(pattern) -> true

问:如何找出复杂程序中匹配错误的原因?

4

1 回答 1

11

您很可能是另一个陷入 Java.matches()操作方式陷阱的程序员——这导致许多人认为该方法的名称用词不当。

阅读这篇文章,用红铁把它印在你的脑海里:

Java 的方法表现得好像作为参数给出的正则表达式被输入开始和输入结束锚点.matches()包围。结果,它尝试并匹配整个输入的正则表达式。^$

这与绝大多数使用正则表达式的编程语言所采用的“正则表达式匹配”定义不同(您真正同意),其中正则表达式可以匹配输入中的任何位置。正如您将从下面的许多评论中看到的那样,其他人不同意。

那是:

"foobar".matches("foobar") == true
"foobar and something else".matches("foobar") == false

Java 中真正的正则表达式匹配是使用.find(); 并且String没有。您必须使用 aPattern和 a Matcher

final Pattern p = Pattern.compile("foobar");
final Matcher m = p.matcher("foobar and something else");
m.find(); // true!
m.matches(); // false!

matches()实际上将使用该模式"^foobar$"

于 2013-06-11T12:36:48.443 回答