如何在PHP中用正则表达式匹配特定序列?筛选手机号在企业编码后的企业
正则匹配解决方案
- 问题核心:仅匹配手机号在企业编码之后的企业条目,排除手机号在编码之前的情况
- 原正则问题:
(?!.*mobile)是正向否定预查,会直接排除所有包含手机号的内容,完全违背需求
修正后的正则表达式
details of the company:(?:(?!mobile:).)*company-code:(.*?),\s*mobile:(.*?)(?=\s|$)
正则说明
(?:(?!mobile:).)*:非捕获匹配段,确保从开头到company-code:之间的内容里不包含mobile:,彻底排除手机号在编码前的情况company-code:(.*?),\s*mobile:(.*?):分别捕获企业编码和手机号,.*?用非贪婪匹配避免过度截取(?=\s|$):限制手机号的结束边界,防止匹配到后续无关内容
测试效果
- 对条目1
details of the company: name:xyz, company-code:100, mobile:123:成功捕获编码100、手机号123 - 对条目2
details of the company: name:xyz, mobile:12345, company-code:100:因编码前存在手机号,不会被匹配
内容的提问来源于stack exchange,提问作者khan
相关产品推荐
相关产品推荐

