我正在从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不匹配的情况下似乎没有相关性。
我应该注意哪些其他差异?
答案 0 :(得分:5)
java.util.regex.Matcher.matches()方法会尝试将完整的输入字符串与正则表达式false
匹配。
如果要在输入字符串中搜索模式,则需要使用java.util.regex.Matcher.find()方法:
result = matcher.find(); // returns true
答案 1 :(得分:2)
使用find()
代替matches()
。它的功能与您期望的完全相同。