2011-12-20 207 views
0

请注意regx中的空格!无论如何感谢所有试图贡献的人。有了空格,我猜想这真的很有挑战性。这个正则表达式是什么意思:\ d {3} - \ d {4}。*

我看到当前的代码有以下几点:

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”的正确的正则表达式是什么?

+1

你确定这是'\\ D',而不是'\\ D'? – 2011-12-20 22:01:17

+0

是的,我确定。但是,这也可能是一个现有的错误。你知道“\\ d {3} - \\ d {4}。”是什么意思吗? – Mike 2011-12-21 18:25:53

+1

Re“有了空间,我猜想这真的很具挑战性。”,不,空间是垃圾。 – ikegami 2011-12-21 22:38:33

回答

2

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

但他们忘记了解释.*这实际上意味着“奇招”,将.代表除换行符任何字符。

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

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

因此,假设你从{}之间移除这些空间将匹配

" ddd -#### "

其中,“d”,在这种情况下是毫不夸张的字母“d”和“#”又是任何数字值。再次,由于.*,这可以选择跟随任何事情。但是现在,因为在.*之后有一个额外的空间,所以匹配字符串还必须以至少一个空格结束....虽然这是一个非常无用的表达,你确定要解释第一个d从字面上??也许你应该再次检查你的语法.....

而且,有趣的事实,没有必要为了躲避第一空间,您正则表达式

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

+0

请再次看到问题,谢谢 – Mike 2011-12-21 16:43:34

+0

我看到了差异,但我认为你的正则表达式仍然有错误,请参阅我的编辑。 – gnomed 2011-12-21 23:04:14

+0

我对这个很满意。 – Mike 2011-12-22 19:52:43

1

此正则表达式(如果该空间被移除)将匹配的形式

###-#### 

#凡表示一个数字和-字面意思-的任何表达。

+0

问题恢复为原始。请看看 – Mike 2011-12-21 16:41:26

1

它看起来像(与空格删除)它应该匹配一个电话号码(无国家代码和地区代码)。

\d{3}-\d{4}装置<three digits> - <four digits>,或XXX-XXXX(其中每个X是一个数字)。

+0

请再次看到问题,谢谢。这不是关于电话号码,而是关于客户可以在搜索框中输入的内容。 – Mike 2011-12-21 16:44:27

1

这是雅加达Oro(已退休两年BTW)的用法。

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

并注意.matches()是用词不当(等都是Java的.matches()方法对于这个问题),因为它试图将整个输入,这不是正则表达式匹配的定义(和这就是为什么我停住了正则表达式)匹配。

+0

请再次看到这个问题,谢谢 – Mike 2011-12-21 16:43:55

+0

呃,我唯一看到的是oro默认使用perl的'/ x'修饰符,并且这个注释的确面临空间挑战。 – fge 2011-12-21 16:47:39

+0

即使使用/ x,'\ d {3}'也不同于\ d {3}'。 – ikegami 2011-12-21 22:36:51

4

字符串字面

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

产生串

​​

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

  1. 开始与3位*
  2. 其次破折号
  3. 其次4位数字
  4. 后跟AREN 0个或多个字符的字符串't newlines **
  5. 紧接着字符串的结尾。

例如,

  • 123-1234:匹配
  • 123-1234XYZ:匹配
  • 123-1A34:没有匹配
  • 1234-123:没有匹配
  • X123-1234:没有匹配

* —在Perl中,一个数字与Unicode的 “十进制数” 常规类别的任何字符。在Unicode 6.0中,有420个这样的字符,包括09。我不确切知道使用Perl5Matcher库时,哪些字符\d匹配。使用[0-9]而不是\d来匹配09

* * —默认情况下,.匹配除换行符以外的任何字符。 Perl5Compiler可以被告知.应该匹配包括换行符的任何字符。

+0

你能再次看看这个问题吗?原始问题与这些正则表达式周围的空格一起出现。 – Mike 2011-12-21 16:40:32

+0

@Mike,这些空间肯定是在某些时候偶然添加的。摆脱他们。 – ikegami 2011-12-21 19:20:16

+0

谢谢。我想你是对的。这是一个现有的错误。确认这是一个bug帮助我。 – Mike 2011-12-22 19:53:20

相关问题