Java 这个正则表达式是什么意思:\\d{3}-\\d{4}*

Java 这个正则表达式是什么意思:\\d{3}-\\d{4}*,java,regex,perl,Java,Regex,Perl,请注意regx中的空格!无论如何,感谢所有努力贡献的人。对于空间,我想这真的很有挑战性 我看到当前代码有以下内容: Perl5Compiler compiler = new Perl5Compiler(); Perl5Matcher matcher = new Perl5Matcher(); Pattern pattern = compiler.compile("\\ d{ 3 } -\\d{4}.* "); // pattern for string starting with " 00 0

请注意regx中的空格!无论如何,感谢所有努力贡献的人。对于空间,我想这真的很有挑战性

我看到当前代码有以下内容:

Perl5Compiler compiler = new Perl5Compiler();
Perl5Matcher matcher = new Perl5Matcher();
Pattern pattern = compiler.compile("\\ d{ 3 } -\\d{4}.* "); // pattern for string starting with " 00 0 - 00 0 0 "   

if (matcher.matches(Num, pattern)) {  
    return true;  
}  
但是,我觉得
“\\d{3}-\\d{4}.*”
“00 0-00 0”
匹配是不对的。有人知道这个正则表达式的真正含义吗?或者从另一个角度来看,“00 0-00 0 0”的正确正则表达式是什么?

此正则表达式(如果删除空格)将匹配表单的任何表达式

###-####
其中,
#
表示一个数字,
-
的字面意思是
-

此正则表达式(如果空格被删除)将匹配表单的任何表达式

###-####
其中,
#
表示一个数字,
-
的字面意思是
-

它看起来(去掉空格)应该与电话号码匹配(无国家代码和区号)

\d{3}-\d{4}
表示
-
,或
XXX-XXXX
(其中每个
X
都是一个数字)。

它看起来(去掉空格)应该与电话号码匹配(无国家代码和区号)


\d{3}-\d{4}
是指
-
,或
XXX-XXXX
(其中每个
X
都是一个数字)。

这是雅加达Oro的用法(该公司已退休两年)

我能看到的唯一一件事是,空格被完全弄乱了,因为如果使用regex
^\d{3}-\d{4}.*$
,它实际上与(空格挑战)注释所说的内容相匹配,即任何以三位数字开头的字符串,然后是连字符,然后是四位数字


请注意,
.matches()
是一个误称(Java的
.matches()
方法也是如此),因为它试图匹配整个输入,这不是正则表达式匹配的定义(这也是我锚定正则表达式的原因)。

这是Jakarta Oro的用法(顺便说一句,它已经退役两年了)

我能看到的唯一一件事是,空格被完全弄乱了,因为如果使用regex
^\d{3}-\d{4}.*$
,它实际上与(空格挑战)注释所说的内容相匹配,即任何以三位数字开头的字符串,然后是连字符,然后是四位数字


请注意,
.matches()
是一个误称(Java的
.matches()
方法也是如此),因为它试图匹配整个输入,这不是正则表达式匹配的定义(这也是我锚定正则表达式的原因)。这些人说它将匹配
\

但是他们忘记了解释
*
这个词,它本质上意味着“其他任何东西”,而
表示除换行符以外的任何字符

它对正则表达式的成功没有多大影响,但它防止正则表达式在匹配时跨越多个换行符。这通常是理想的,这取决于您是否希望输入中出现换行以及它们的明显含义

编辑:首先,编辑的正则表达式不会在Java中编译,在
{}
而且,里面的空间是没有意义的,它只是寻找量化的数字

因此,假设您从它匹配的
{}
之间删除这些空格

“ddd-#####”

这里的“d”是字母“d”的字面意思,“#”也是任意数字值。同样,由于
*
,这后面还可以加上任何内容。但是现在,因为
*
后面有一个额外的空格,所以匹配的字符串也必须以至少一个空格结尾。。。。这是一个非常无用的表达式,您确定要逐字解释第一个
d
??也许您应该再次检查语法

另外,有趣的是,没有必要逃离第一个空间,你的正则表达式


“\\d{3}-\\d{4}.*”
在语法上等同于
“d{3}-\\d{4}.*”

这些人是正确的,它将匹配
###-######

但是他们忘记了解释
*
这个词,它本质上意味着“其他任何东西”,而
表示除换行符以外的任何字符

它对正则表达式的成功没有多大影响,但它防止正则表达式在匹配时跨越多个换行符。这通常是理想的,这取决于您是否希望输入中出现换行以及它们的明显含义

编辑:首先,编辑的正则表达式不会在Java中编译,在
{}
而且,里面的空间是没有意义的,它只是寻找量化的数字

因此,假设您从它匹配的
{}
之间删除这些空格

“ddd-#####”

这里的“d”是字母“d”的字面意思,“#”也是任意数字值。同样,由于
*
,这后面还可以加上任何内容。但是现在,因为
*
后面有一个额外的空格,所以匹配的字符串也必须以至少一个空格结尾。。。。这是一个非常无用的表达式,您确定要逐字解释第一个
d
??也许您应该再次检查语法

另外,有趣的是,没有必要逃离第一个空间,你的正则表达式

“\\d{3}-\\d{4}.*”
在语法上等同于
“d{3}-\\d{4}.*”

字符串文字

"\\d{3}-\\d{4}.*"
生成字符串

\d{3}-\d{4}.*
当用作Perl5Matcher正则表达式模式时,它匹配

  • 以3位数字开始*
  • 紧接着是破折号
  • 后跟4位数字
  • 后跟0个或多个非换行符的字符**
  • 后跟字符串的末尾
  • 比如说,

    • 123-1234
      :匹配
    • 123-1234XYZ
      :匹配
    • 123-1A34
      :无ma