如何编写正则仅删除字符串中非URL部分的数字
需求可直接通过PHP PCRE正则的(*SKIP)(*FAIL)语法实现,逻辑为:优先匹配所有URL并标记为跳过不参与替换,再执行原有的数字串删除规则即可。
最终代码
$story = preg_replace('/(?:\b(?:https?:\/\/)?\w+(?:\.\w+)+\/\S*)(*SKIP)(*FAIL)|\+?[0-9][0-9()\-\s+]{4,20}[0-9]/', '', $story);
效果验证
你提供的测试输入:
Call our company on 3453453454 or 0045 345 532 34 or visit our website domain.com/page/?id=article_1625463
经过上述代码处理后,输出与你期望的结果完全一致:
Call our company on or or visit our website domain.com/page/?id=article_1625463
补充说明
如果你的实际业务场景中存在特殊格式的URL,仅需要调整第一个分组中的URL匹配规则即可,当前默认规则已覆盖带/不带http/https前缀、带路径的常规域名URL场景,不会误删URL内的数字。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

