PHP preg_match_all返回空
问题描述:
这是我的代码:PHP preg_match_all返回空
$str = "sdf13631389945fssx6221363138994523213af";
preg_match_all("/^1\d{10}$/",$str,$result);
var_dump($result);
我要手机不匹配。 13631389945但不想匹配这个电话号码。在6221363138994523213,所以我写这个,但它返回空,你能帮我写一个正确的模式,非常感谢!
答
它不会返回结果,因为整个字符串与表达式不匹配。如果你只想要部分字符串匹配,那就摆脱^
和$
。
preg_match_all("/1\d{10}/",$str,$result);
为了不在你将不得不解释究竟是什么使得一个无效的匹配字符串的第二部分匹配的电话号码。如果它是周围的数字然后使用这个:
(?:^|[^\d])(1\d{10})(?:$|[^\d])
但是,如果我摆脱^ $,只要写你说什么,它会返回所有的13631389945包括没有。在6221363138994523213,这是我不想要的,我只想匹配第一个号码。 – killua0083
@ killua0083那么告诉我们为什么它不应该返回第二个。如果仅仅是事实上它有其他数字,那么它只能匹配任何一边没有数字的东西:'(?:^ | [^ \ d])(1 \ d {10})(?:$ | [^ \ d])' – Chris
因为我想统计电话号码,6221363138994523213不是电话号码,所以不应该统计 – killua0083