我正在从 Jakarta Regexp 迁移到标准 Java 6 正则表达式包 java.util.regex
。当未在正则表达式中指定开头 ^
和结尾 $
时,我注意到以下差异:当正则表达式匹配字符串的一部分时,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 不匹配的情况下,这似乎并不相关。
还有其他我应该注意的区别吗?
最佳答案
java.util.regex.Matcher.matches()方法将尝试将完整的输入字符串与您的正则表达式进行匹配,这将是 false
。
如果你想在输入字符串中搜索模式,你需要使用 java.util.regex.Matcher.find()方法代替:
result = matcher.find(); // returns true
关于java - Jakarta Regexp 和 Java 6 java.util.regex 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6582569/