这些语法\\ d \\ d \\ d和\\ d {3}在所有环境中的工作方式是否相同?

时间:2013-12-17 03:50:39

标签: java regex

想问一下这两个正则表达式之间是否存在差异?

\d\d\d\d{3}

我已经在我的本地机器上使用java和Windows操作系统测试了这个,并且两者都工作得很好并且具有相同的结果。但是,当在linux环境中运行时,\d\d\d可以正常运行,\d{3}则无效。这里的环境是一个因素吗?或者还有什么因素可以使这两个表达式的结果不同?

这是代码的片段:

Pattern pattern = Pattern.compile( ".*aaa\\.bbb\\d{3}.ccc\\d{3}." );
Matcher matcher = pattern.matcher( "aaa.bbb033.ccc342.ffff" );
matcher.find();

使用\d\d\d,matcher.find()= true

使用\d{3},matcher.find()= false

1 个答案:

答案 0 :(得分:1)

不,有不同的正则表达方言。 [1] grep甚至不止一个。

grep    'abc|def'     # Matches abc|def
grep    'abc\|def'    # Matches abc or def
grep -P 'abc|def'     # Matches abc or def
grep -P 'abc\|def'    # Matches abc|def

好的grep(没有-P-E)只是无法识别a{m}。或\d

$ cat foo
123
1{3}
\d{3}
\d\d\d

$ grep '\d{3}' foo
\d{3}

$ grep '\\d\\d\\d' foo
\d\d\d

$ grep '\d\d\d' foo
ddd

虽然它在“Perl”模式下(在某些版本的“扩展”模式下)

$ grep - P '\d{3}' foo
123

$ grep -P '\d\d\d' foo
123

那就是说,我希望给定版本的Java的所有实现都能理解相同的正则表达式语言。


  1. 事实上,original definition的某些语言的正则表达式不再是技术上的正则表达式,因为它们的匹配度超过regular languages