Jakarta Regexp和Java 6 java.util.regex之间的差异

时间:2011-07-05 12:22:31

标签: java regex

我正在从Jakarta Regexp迁移到标准Java 6正则表达式包java.util.regex。我没有在正则表达式中指定开头^和结束$时注意到以下区别:当regexp匹配部分字符串时,Jakarta Regexp返回true,而Java 6 java.util.regex包执行不:

String regexp = "\\d";
String value = "abc1abc";

Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(value);
result = matcher.matches(); // returns false

返回false而不是:

RE re = new RE(regexp);
re.match(value); // returns true

返回true

这背后的原因是什么?我已经考虑过贪婪/懒惰的匹配,但在JDK 6不匹配的情况下似乎没有相关性。

我应该注意哪些其他差异?

2 个答案:

答案 0 :(得分:5)

java.util.regex.Matcher.matches()方法会尝试将完整的输入字符串与正则表达式false匹配。

如果要在输入字符串中搜索模式,则需要使用java.util.regex.Matcher.find()方法:

 result = matcher.find(); // returns true

答案 1 :(得分:2)

使用find()代替matches()。它的功能与您期望的完全相同。