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

Java 这两种语法\\d\\d\\d和\\d{3}在所有环境中的工作方式是否相同?,java,regex,Java,Regex,请问这两个正则表达式之间有区别吗 \d\d\d与\d{3} 我已经用java和windows操作系统在我的本地机器上进行了测试,两种操作系统都运行正常,结果相同。但是,在linux环境中运行时,\d\d可以正常工作,而\d{3}不能。环境是这里的一个因素吗?或者,还有什么因素使这两个表达式在结果上有所不同 以下是代码片段: Pattern pattern = Pattern.compile( ".*aaa\\.bbb\\d{3}.ccc\\d{3}." ); Matcher matcher =

请问这两个正则表达式之间有区别吗

\d\d\d
\d{3}

我已经用java和windows操作系统在我的本地机器上进行了测试,两种操作系统都运行正常,结果相同。但是,在linux环境中运行时,
\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”模式下(以及在某些版本中在“Extended”模式下)运行

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


  • 事实上,某些语言的正则表达式从技术上讲不再是正则表达式,因为它们可以匹配多个正则表达式

  • 这不是正则表达式。那是另外一种语言?NET?它们是等价的正则表达式。这一定与你执行它的方式有关。请(准确地)显示您的测试代码。顺便说一句@shiplu,这显然是java,所以我添加了java标记。正如@ikegami在下面指出的,regex的许多方言在细节上会有所不同。嗨@ikegami感谢您的回复。如果我理解正确,除非在perl模式下,否则在linux中无法识别这两个表达式(\\d\\d\\d和\\d{3})?为了在两种环境(linux和windows)中都能识别这两个表达式,您建议执行什么操作?Unix grep在扩展模式下理解
    \d{3}
    。在控制台上运行
    echo-e'123\nab3'|grep-e'\d{3}'
    查看它的运行情况。它与操作系统无关。不同的工具(
    grep
    vs
    java
    )有不同的匹配语言。
    echo-e'123\nab3'| grep-e'\d{3}'
    没有为我返回任何内容。感谢@ikegami的解释。
    $ grep - P '\d{3}' foo
    123
    
    $ grep -P '\d\d\d' foo
    123