如何在正则表达式中使用‘或’条件?自定义匹配规则不生效如何解决
正则无法正常生效的常见原因
- 缺少边界锚定,存在误匹配/漏匹配
你当前的正则没有添加开头^和结尾$锚点,只会匹配字符串中的子片段,不会校验整个字符串是否完全符合规则。比如输入D_123abc、xABC这类不符合要求的内容,也会命中匹配;如果你的使用场景是要求整个字符串完全匹配规则,这个问题会直接导致规则失效。 - 未适配JSON字符串的引号特征
你给出的JSON规则里的取值是带双引号的,而当前正则没有匹配双引号的逻辑,如果你的输入内容是JSON中取出的带引号的原始值(比如"NONE"、"D_456"),正则会完全匹配失败。 - 冗余捕获分组导致取值错误
你写的正则里嵌套了多层不必要的捕获分组,分组序号分别是:- 整体匹配NONE/ABC的结果
- 单独匹配NONE的结果
- 单独匹配ABC的结果
- 整体匹配D_xxx的结果
- D_后面的数字结果
如果你在后续取值时选错了分组序号,会出现取到空值或者非预期内容的问题。
修正后的参考写法
如果是需要完全匹配整个带双引号的JSON字符串、同时提取对应内容,可修改为:
^"((?:NONE|ABC)|(?:D_(-?\d+)))"$
这个写法里分组1返回的是全匹配的有效值(NONE/ABC/D_xxx),分组2返回D_后缀的数字(如果是D_类型的话,否则为空)。
内容的提问来源于stack exchange,提问作者f. c.
相关产品推荐
相关产品推荐

