想问一下这两个正则表达式有区别吗?
\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] 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 的所有实现都能理解相同的正则表达式语言。
- 事实上,一些语言的正则表达式在技术上并不是original definition 的正则表达式。因为它们可以匹配超过 regular languages .
关于java - 这两种语法\\d\\d\\d 和\\d{3} 在所有环境中都一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20625605/