Regex前瞻性字符限制



我正在努力学习一些关于Regex的东西。我一开始试图隐藏九位数字的一些匹配项,比如SSN,但让所有带有"订单"或"路由号"的九位数字通过,但似乎只有长度相同的字符串才能工作。有没有办法在不创建多条线的情况下解决这个问题?谢谢

(?<!(Order:s|Routingsnumber:s))
(?!000|666)([0-6]dd|7[01256]d|73[0123]|77[012])
([-]?)
([1-9]{2})
3
([1-9]{4})
(?!([w&/%"-]))

对于屏蔽SSN,这个似乎有效^(?!000)(?!666)(?!9)d{3}([- ]?)(?!00)d{2}1(?!0000)d{4}$但我希望它不会屏蔽任何前面有"订单"或"路由号"字样的9位数字。

许多正则表达式引擎要求查找表的长度为固定长度,并拒绝执行可变长度的查找表;如果你的情况是这样的,你应该看到一个警告。如果您没有看到警告,那么问题可能是您的regexp根本没有像您认为的那样工作。

然而,使用lookbehinds通常可以简单地匹配您希望算作lookbehind的文本,然后在检查捕获或匹配对象时丢弃/忽略它。

最新更新