为什么Java和Perl中的正则表达式行为不同?
我的理解是,Java的正则表达式实现是基于Perl的。但是,在下面的示例中,如果使用相同的字符串执行相同的正则表达式,Java和Perl将返回不同的结果 下面是Java示例:为什么Java和Perl中的正则表达式行为不同?,java,regex,perl,Java,Regex,Perl,我的理解是,Java的正则表达式实现是基于Perl的。但是,在下面的示例中,如果使用相同的字符串执行相同的正则表达式,Java和Perl将返回不同的结果 下面是Java示例: public class RegexTest { public static void main( String args[] ) { String sentence = "This is a test of regular expressions."; System.out.pri
public class RegexTest {
public static void main( String args[] ) {
String sentence = "This is a test of regular expressions.";
System.out.println( sentence.matches( "\\w" ) ? "Matches" : "Doesn't match" );
}
}
此返回:不匹配
下面是Perl示例:
my $sentence = 'This is a test of regular expressions.';
print ( $sentence =~ /\w/ ? "Matches" : "Doesn't match" ) . "\n";
返回:匹配
对我来说,Perl结果是有意义的。它查找单个单词字符的匹配项。我不明白为什么java不认为它是一个匹配。差异的原因是什么?Java
matches
方法正在测试正则表达式是否匹配整个字符串。要测试正则表达式是否可以在字符串中的任何位置找到,请创建并使用其方法。此外,Perl正则表达式语法不是Java正则表达式语法
在这种情况下,它不一定适用,但这是对您更一般问题的回答
Java有一种称为“PCRE”的正则表达式语法,即:Perl兼容
然而,这个名称具有严重的误导性,因为它几乎没有真正与Perl兼容的内容
例如,Perl正则表达式允许在表达式本身和许多其他高级运算符中执行代码,并且Perl中的某些语法与其他语言中的不同(即:许多语言使用\>
,\PCRE在perl版本5的早期与perl兼容,或者是perl v4。不确定。与此同时,perl的正则表达式向前发展了很多。+1用于回答更一般的问题(标题中的问题)我想补充一点,Jeffrey Friedl的《掌握正则表达式》一书对于理解常见正则表达式风格之间的异同非常有帮助。