这个正则表达式意味着什么:\\ d {3} - \\ d {4}。*

时间:2011-12-20 21:59:17

标签: 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 - 00 0 0 "   

if (matcher.matches(Num, pattern)) {  
    return true;  
}  

但是,我觉得"\\ d{ 3 } -\\d{4}.* "" 00 0 - 00 0 0 "匹配并不合适。谁知道这个正则表达式的真正含义是什么?或者从另一个角度来看,"正确的正则表达式是什么? 00 0 - 00 0 0"?

6 个答案:

答案 0 :(得分:4)

字符串文字

"\\d{3}-\\d{4}.*"

生成字符串

\d{3}-\d{4}.*

当用作Perl5Matcher正则表达式模式时,它匹配

的字符串
  1. 以3位*
  2. 开头
  3. 跟着破折号
  4. 后跟4位数字
  5. 后跟0个或更多不是换行符的字符**
  6. 后面是字符串的结尾。
  7. 例如,

    • 123-1234:匹配
    • 123-1234XYZ:匹配
    • 123-1A34:不匹配
    • 1234-123:不匹配
    • X123-1234:不匹配

    * - 在Perl中,数字是具有Unicode“Decimal Number”General Category的任何字符。在Unicode 6.0中,有420个此类字符,包括09。在使用Perl5Matcher库时,我不确切知道字符\d匹配的内容。使用[0-9]代替\d仅将09匹配。

    ** - 默认情况下,.匹配除换行符之外的任何字符。可以告诉Perl5Compiler .应匹配任何字符,包括换行符。

答案 1 :(得分:2)

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

但他们忘记解释.*这意味着“其他任何东西”,.代表除换行符之外的任何字符。

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

编辑:首先,编辑的正则表达式不会用Java编译,{}之间有空格 此外,这里的空间毫无意义,它只是在寻找量化数字。

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

" ddd -#### "

在这种情况下,“d”字面意思是字母“d”和“#”再次是任何数字值。由于.*,因此可选地后跟任何内容。但是现在,因为在.*之后有一个额外的空格,匹配的字符串也必须以至少一个空格结束....但这是一个非常无用的表达式,你确定要先解释它{{1} 1}}从字面上看?也许你应该再次检查你的语法.....

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

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

答案 2 :(得分:1)

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

的任何表达式
###-####

其中#表示数字,-表示字面-

答案 3 :(得分:1)

看起来(删除了空格)它应该匹配一个电话号码(没有国家代码和区号)。

\d{3}-\d{4}表示<three digits> - <four digits>XXX-XXXX(其中每个X都是数字)。

答案 4 :(得分:1)

这是Jakarta Oro的用法(已经退休了两年BTW)。

我唯一可以看到的是空间已经完全搞砸了,因为如果你使用正则表达式^\d{3}-\d{4}.*$,它实际上匹配(空间挑战的)注释所说的,即任何字符串从三位开始,然后是连字符,然后是4位数。

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

答案 5 :(得分:1)

正则表达式\ d{3} -\d{4}.*匹配ddd -XXXXY形式的字符串,其中每个X可以是任意数字,Y可以是任何字符串。< / p>

当你有一个视觉助手向你展示正在发生的事情时,更容易看到这个正则表达式的作用:http://www.debuggex.com/?re=%5C+d%7B3%7D+-%5Cd%7B4%7D.%2A+&str=+ddd+-9662%C2%A3%C2%AA%C2%A3%3B%29+