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

我有一个正则表达式来匹配格式为电话号码或类似于电话号码的数字。我必须省略以正斜杠开头的数字,因为这可能是 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 24242424422424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454

测试用例2:(第一个数字前面有一个空格)

23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454

输出 2:(以粗体斜体表示的匹配项)

23242424 242424242 24242424422424244242 242 24242424/1212121212 1 05454545454 5454045454 0115545454 /454545454


FFIVE
浏览 138回答 2
2回答

阿波罗的战车

您可以使用否定后向查找而不是否定字符类来匹配字符串位置的开头:'/(?<![\/0-9])(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{2,3}[\s.-]?\d{3}/' &nbsp;&nbsp;^^^^^^^^^^^^请参阅正则表达式演示这里,(?<![\/0-9])是一个负向后查找,与前面没有紧接正斜杠或数字的位置相匹配。请注意,您不需要不区分大小写的修饰符,除非这是您还匹配字母的较长模式的一部分。

泛舟湖上清波郎朗

我的方法非常残酷,但在搜索数字之前,我会简单地从主字符串中删除所有以 / 开头的数字。就像是$str = preg_replace('/\/\d+/', '', $str);
打开App,查看更多内容
随时随地看视频慕课网APP