搞不懂丶
2015-04-28 13:06
$p = '/\d+?\-\d+?/';
$str = "我的电话是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; //结果为:010-1
不好意思。重新回复一下。
这个例子中`\d+?` 是比较容易范迷糊的。后面的那组`\d+?`你已经知道原因了。 我说一下前面的那组`\d+?`
当正则开始匹配的时候,`\d+?`会最先匹配`我`,发现不对,继续匹配,直到匹配到字符串中的第一个0,发现对了。但这时候重点来了,如果0后面匹配到杠(-)以后,才满足`\d+?\-` 这一段。但是0后面不是-,而是1.所以会重新匹配01,然后依然是上面那样。直到匹配到010-的时候发现满足`\d+?\-` ,那么它会继续匹配剩下的正则表达式部分。后面的你也知道了。
这里关键点是那个杠(-)因为你只有匹配到杠(-)的时候才满足`\d+?\-`这段,即匹配结果是010-
第二个\d 匹配到了1就结束了。因为那个+表示1个或者多个。既然匹配到1了,就表示正则满足,自然就结束后面的匹配了
PHP进阶篇
181897 学习 · 2595 问题
相似问题