我试图从字符串中提取仅美国的电话号码。
我环顾了Web/SO,但没有找到适合我需要的任何解决方案。
老实说,我有2.5年的Web编程经验,但是我对RegEX很感兴趣。
这是我写的(\d{3}+\-\d{3}+\-\d{4}+)
的RegEX
但它只检测589-845-2889
这是我要提取的电话号码。
589-845-2889
(589)-845-2889
589.845.2889
589 845 2889
5898452889
(589) 845 2889
请告诉我如何在单个用于PHP的Regex中实现这一壮举。
编辑:
如果您觉得用户可以输入其他格式的美国号码,请同时提及,并将其包括在RegEX中。
附言:
实际上,我正在尝试抓取Craiglist,并且用户可能以任何可能的格式发布了他们的电话号码。
最佳答案
在PHP(PCRE)中,您可以基于conditional subpatterns使用此正则表达式:
(\()?\d{3}(?(1)\))[-.\h]?\d{3}[-.\h]?\d{4}
RegEx Demo
(\()?
与可选的(
匹配,并将其捕获在组#1 (?(1)\))
是一种条件模式,仅在组#1不为空时匹配结束)
,即匹配项的左侧存在(
。 关于php - 从字符串中提取美国电话号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38201863/