Jakarta Regexp和Java 6 Java.util.regex之间的差异
我正在从Jakarta Regexp迁移到标准Java6正则表达式包Jakarta Regexp和Java 6 Java.util.regex之间的差异,java,regex,Java,Regex,我正在从Jakarta Regexp迁移到标准Java6正则表达式包Java.util.regex。在regexp中不指定开头^和结尾$时,我注意到了以下区别:当regexp与字符串的一部分匹配时,Jakarta regexp返回true,而Java 6 Java.util.regex包不匹配: String regexp = "\\d"; String value = "abc1abc"; Pattern pattern = Pattern.compile(regexp); Matcher
Java.util.regex
。在regexp中不指定开头^
和结尾$
时,我注意到了以下区别:当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不匹配的情况无关
还有什么我应该注意的差异吗?使用find()
而不是matches()
。它的功能完全符合您的预期 该方法将尝试将完整的输入字符串与正则表达式匹配,正则表达式将为false
如果要在输入字符串中搜索模式,则需要使用方法:
result = matcher.find(); // returns true
有什么重要的句法差异吗?或者这个
匹配
/查找
的东西是雅加达Regexp的用户唯一应该关心的事情?嗯,我不知道,但我对雅加达Regexp一点也不熟悉。例如,雅加达的[:digit://code>是JDK中的\d
。或者雅加达的[:xdigit:
变成\p{xdigit}
。