正则表达式如何准确的从字符串中提取手机号码?

例如有两个字符串$a1,$a2,我的正则为$preg="/(0|86)?1(([35][0-9])|(47)|[8][01236789])\d{8}/i"(前面带0或带8... 例如有两个字符串$a1,$a2,我的正则为 $preg="/(0|86)?1(([35][0-9])|(47)|[8][01236789])\d{8}/i" (前面带0或带86的手机号也进行了匹配);
用$preg匹配时$a1,$a2都提取出了'15073450319'这个号码,但是我现在要排除$a2这种情况,$a2这种视为乱码不提取,如何修改$preg?望高手指点,谢谢!
$a1="我的手机号码是15073450319请记住";
$a2="adsdafasdf 1012015073450319refeddddf";
也就是说像$a2这种手机号前面有其它数字的就不能匹配
展开
 我来答
novice_pegasus
2013-02-26 · TA获得超过624个赞
知道小有建树答主
回答量:722
采纳率:100%
帮助的人:648万
展开全部
你的表达式前后加\b就行
/\b(0|86)?1(([35][0-9])|(47)|[8][01236789])\d{8}\b/i
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leezhxing
2013-02-26 · 超过14用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:40.8万
展开全部
匹配号码前加上$,表明要以15(举例)开头的就行了
追问
前面加$的话连$a1这种情况也匹配不出来
追答
对,我想错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dingchaoant
2013-02-25 · TA获得超过1111个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:103万
展开全部
在你匹配的正则前后都加上\D试试呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式