Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java和Perl中的正则表达式行为不同?_Java_Regex_Perl - Fatal编程技术网

为什么Java和Perl中的正则表达式行为不同?

为什么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

我的理解是,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.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的《掌握正则表达式》一书对于理解常见正则表达式风格之间的异同非常有帮助。