Perl的综合电话号码的正则表达式[复制]

问题描述 投票:-1回答:3

这个问题已经在这里有一个答案:

我有一个包含以下格式的电话号码文件:

(xxx) xxx.xxxx
(xxx).xxx.xxxx
(xxx) xxx-xxxx
(xxx)-xxx-xxxx
xxx.xxx.xxxx
xxx-xxx-xxxx
xxx xxx-xxxx
xxx xxx.xxxx

我必须分析这些的电话号码,只有那些格式的文件,并将其输出到一个单独的文件。我用perl,所以到目前为止,我有什么,我认为有两个这些数字的有效的正则表达式

my $phone_regex = qr/^(\d{3}\-)?(\(\d{3}\))?\d{3}\-\d{4}$/;

但我不知道这是正确的,还是怎么办,其余全部在一个正则表达式。谢谢!

regex perl
3个回答
1
投票

干得好

\(?\d{3}\)?[-. ]\d{3}[-. ]\d{4}

a demo on regex101.com


Broken down this is
\(?   # "(", optional
\d{3} # three digits
\)?   # ")", optional
[-. ] # one of "-", "." or " "
\d{3} # three digits
[-. ] # same as above
\d{4} # four digits

如果你愿意,你可以在正确的网站(\b),一些潜在的匹配可以被过滤掉,然后在添加单词边界。


1
投票

你也没能逃脱括号正确,并已白白逃脱它不需要连字符。您要创建的正则表达式是这样的,

^\(?\d{3}\)?[ .-]\d{3}[ .-]\d{4}$

说明:

  • ^ -
  • qazxsw POI - 可选出发括号qazxsw POI
  • \(? - 紧随其后的三个数字
  • ( - 可选右括号\d{3}
  • \)? - 单个字符空格或)[ .-]
  • . - 紧随其后的三个数字
  • - - 再一个字符空格或\d{3}[ .-]
  • . - 随后四位数
  • - - 字符串的结束

\d{4}


1
投票

您当前的正则表达式允许太多,因为这将使$开头。它也不会处理任何的Demo或空格分隔的情况。你想拥有的只有三组数字,然后让身边,你可以使用一个xxx-(xxx)第一套可选的括号,然后您可以利用.的指示设置要允许分离的。

此外,不要使用alternation,因为它会匹配任何Unicode数字。既然你可能只希望允许ASCII数字,使用字符类character classes(还有其他的选择,但是这是最简单的)。

最后,\d允许在字符串的结尾换行,所以使用[0-9]代替它没有。确保,如果你是从你$他们,使他们不包含尾随的换行符文件阅读这些。

这给我们留下了:

\z

如果你想确保这两个分离器是相同的,如果第一个是chompqr/^(?:[0-9]{3}|\([0-9]{3}\))[-. ][0-9]{3}[-.][0-9]{4}\z/ ,它是最容易做到这一点在多个正则表达式检查(这些可以更宽松,因为我们已经验证的一般格式):

.
© www.soinside.com 2019 - 2024. All rights reserved.