为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配除以正斜杠开头的所有数字

正则表达式匹配除以正斜杠开头的所有数字

PHP
FFIVE 2023-10-22 21:55:09
我有一个正则表达式来匹配格式为电话号码或类似于电话号码的数字。我必须省略以正斜杠开头的数字,因为这可能是 URL 的一部分。我使用了以下正则表达式。它在所有情况下都能很好地工作,但正则表达式会忽略句子开头没有正斜杠的任何数字。谁能帮我解决这里的错误吗?/[^\/0-9](\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{2,3}[\s.-]?\d{3}/i测试案例1:23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454输出 1:(以粗体斜体表示的匹配项)23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454测试用例2:(第一个数字前面有一个空格)23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454输出 2:(以粗体斜体表示的匹配项)23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以使用否定后向查找而不是否定字符类来匹配字符串位置的开头:

'/(?<![\/0-9])(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{2,3}[\s.-]?\d{3}/'
  ^^^^^^^^^^^^

请参阅正则表达式演示

这里,(?<![\/0-9])是一个负向后查找,与前面没有紧接正斜杠或数字的位置相匹配。

请注意,您不需要不区分大小写的修饰符,除非这是您还匹配字母的较长模式的一部分。


查看完整回答
反对 回复 2023-10-22
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

我的方法非常残酷,但在搜索数字之前,我会简单地从主字符串中删除所有以 / 开头的数字。就像是$str = preg_replace('/\/\d+/', '', $str);



查看完整回答
反对 回复 2023-10-22
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信