Perl如何提取(312) 555-1212格式的电话号码
Perl 提取指定格式电话号码解决方案
你的原有代码问题在于正则仅匹配零散的数字段,没有匹配完整的电话号码格式规则,直接写精准匹配目标格式的正则即可实现需求。
核心匹配规则说明
目标格式(312) 555-1212的正则匹配逻辑如下:
- 左括号在正则中属于特殊字符,需要转义为
\( - 匹配3位数字用
\d{3} - 右括号同样转义为
\) - 匹配1个空格直接写空格即可,若允许多个空格可替换为
\s+ - 匹配横杠直接写
- - 末尾4位数字用
\d{4}
完整修改后代码
my $str = 'Phone: (312) 555-1212 _ '; my @elements_found; # 全局匹配所有符合格式的电话号码 my @all_phones = $str =~ /(\(\d{3}\) \d{3}-\d{4})/g; if (@all_phones) { foreach my $ph (@all_phones) { print "PHONE NO: $ph\n"; push(@elements_found, $ph); } }
可选格式化扩展
如果你需要提取后转为纯数字、或者312-555-1212这类无括号的格式,可以分组捕获各段数字:
# 分组捕获区号、前3位、后4位 my @phone_parts = $str =~ /\((\d{3})\) (\d{3})-(\d{4})/; if (@phone_parts == 3) { # 示例:输出为312-555-1212格式 my $formatted_ph = join('-', @phone_parts); print "格式化后的号码:$formatted_ph\n"; }
内容的提问来源于stack exchange,提问作者gatorreina
相关产品推荐
相关产品推荐

