想问一下这两个正则表达式之间是否存在差异?
\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
答案 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的所有实现都能理解相同的正则表达式语言。