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

标签 java regex

我正在从 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/

相关文章:

Java编译错误: Cannot Find Symbol for BufferedReader

java - 使用 Eclipse Transforms 将一个类替换为另一个类 : can't fix ClassFormatError

python 元字符修复

正则表达式从文件中删除密码

python - 正则表达式 '\w+' 应该只返回英文单词,但它的工作方式不同

regex - 是否可以将正则表达式直接放入 XML 内容中?

java - 创建一个 Activity 作为实例?

java - CLASSPATH 变量是隐式的吗?

java - 如何在Android音乐应用程序中录制多个声音

c++ - 在 Windows C++ code::blocks 上 boost 正则表达式