如何编写可匹配任意位置数字、排除前置为@[场景的正则表达式
正则修正方案
你原来的正则存在两个核心问题:
- 开头的
^锚定符强制要求匹配内容必须出现在文本开头,因此数字前有其他字符时无法命中 - 负向断言作用在全文开头,没有针对数字匹配位置的前缀做判断
修正后的正则如下:
(?<!@\[)\b(((\d{4}[ \-]?){3,4})|(\d{3}[\-\s]?\d{5}[\-\s]?\d{7})|\d{7,16})\b
修改说明:
- 移除开头的
^锚定符,允许正则在文本任意位置匹配符合规则的数字 - 新增
(?<!@\[)负向零宽后行断言,会检查当前匹配位置的前序字符是否为@[,如果是则直接拒绝匹配 - 修正原正则字符组冗余错误,将
[\-|\s]改为[\-\s],避免把竖线误判为可匹配的分隔符
匹配效果验证:
- 文本
lorem ipsum 4167782396624925 lorem可正常命中数字4167782396624925 - 文本
lorem ipsum @[4167782396624925 lorem不会命中任何数字
内容的提问来源于stack exchange,提问作者Narvik Sánchez
相关产品推荐
相关产品推荐

