正则表达式负向预查需求:匹配结尾含4+数字的地址并排除指定前缀
解决正则匹配问题
你的正则问题出在只排除了APT 和BOX (带空格)的情况,但没覆盖APT、BOX直接跟数字的场景(比如BOX4044),所以那些不该匹配的案例会被误判。
符合需求的正则表达式:
^.*(?<!APT)(?<!BOX)(?<!APT )(?<!BOX )\d{4,}$
正则说明:
^.*:匹配字符串开头到数字前的任意内容(?<!APT):负向回顾断言,确保数字前不是APT(?<!BOX):确保数字前不是BOX(?<!APT ):确保数字前不是APT(带空格)(?<!BOX ):确保数字前不是BOX(带空格)\d{4,}$:匹配结尾的4位及以上数字
如果想更简洁,也可以合并成:
^.*(?<!(APT|BOX)(?:\s)?)\d{4,}$
这里(?:\s)?匹配可选的空格,用非捕获组(?:...)避免额外分组。
测试验证:
- 匹配:
HITME 1234、HITME 12345、HITME1234 - 不匹配:
BOX 1234、BOX 12345、BOX4044、APT 1234、APT 12345、NONHIT123、NONHIT 123
内容的提问来源于stack exchange,提问作者FrdXt
相关产品推荐
相关产品推荐

