请注意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"?
答案 0 :(得分:4)
字符串文字
"\\d{3}-\\d{4}.*"
生成字符串
\d{3}-\d{4}.*
当用作Perl5Matcher正则表达式模式时,它匹配
的字符串例如,
123-1234
:匹配123-1234XYZ
:匹配123-1A34
:不匹配1234-123
:不匹配X123-1234
:不匹配 * - 在Perl中,数字是具有Unicode“Decimal Number”General Category的任何字符。在Unicode 6.0中,有420个此类字符,包括0
到9
。在使用Perl5Matcher库时,我不确切知道字符\d
匹配的内容。使用[0-9]
代替\d
仅将0
与9
匹配。
** - 默认情况下,.
匹配除换行符之外的任何字符。可以告诉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+