我有一个包含以下任何字符串的文件
"155"
>555.123.4567
>555-123-4567
>(555).123.4567
>(555)123-4567
>(555)-123-4567
我想使用正则表达式
捕获除了1st之外的字符串,输出如下所示555.123.4567
555-123-4567
(555).123.4567
(555)123-4567
(555)-123-4567
到目前为止,我只能提出下面的正则表达式,但它只适用于最后三个字符串
/(\([\d]+\).\-?(-|)[\d]+.-?[\d]+)/g
答案 0 :(得分:1)
答案 1 :(得分:0)
看起来你想要搜索
括号中的三位数字,或仅三位数字
点或连字符,或无任何
三位数
至少一个点或连字符
四位数
这个正则表达式是对此的音译。请注意,添加具有复杂模式的/x
修饰符始终是明智的,这样您就可以添加无关紧要的空格和换行符以使程序更具可读性
use strict;
use warnings 'all';
use feature 'say';
while ( <DATA> ) {
next unless / (
(?: \( \d{3} \) | \d{3} )
([.-]|)
\d{3}
[.-]
\d{4}
) /x;
say $1;
}
__DATA__
"155"
>555.123.4567
>555-123-4567
>(555).123.4567
>(555)123-4567
>(555)-123-4567
555.123.4567
555-123-4567
(555).123.4567
(555)123-4567
(555)-123-4567
但这非常具体,看起来你正在验证手动输入的电话号码。我不确定你会不会因此而变得更好
一些数字和括号
点或连字符
更多数字,圆点或连字符
看起来像这样
/ ( [()\d]+ [.-] [\d.-]+ ) /x