繁体   English   中英

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

[英]Regex to match all numbers except those starting with Forward slashes

我有一个正则表达式来匹配格式为电话号码或类似于电话号码的号码。 我必须省略以正斜杠开头的数字,因为它可能是 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 5454545454

输出 1:(匹配以粗斜体表示)

23242424 242424242 2424242442 4 2424244242 2421212121212分之242424241 05454545454 5454045454 0115545454/454545454

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

23242424 242424242 24242424424 2424244242 242 24242424/1212121212 1 05454545454 5454045454 045454545454

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

23242424 242424242 2424242442 4 2424244242 2421212121212分之242424241 05454545454 5454045454 0115545454/454545454

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

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

查看正则表达式演示

在此, (?<![\\/0-9])是匹配不立即前面有一个正斜杠或数字的位置处的负回顾后发。

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

我的方法很残酷,但我会在搜索数字之前简单地从主字符串中删除任何以 / 开头的数字。 类似于$str = preg_replace('/\\/\\d+/', '', $str);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM