如何编写正则匹配指定模式前的内容,且模式不存在时也能正常匹配
正则修改方案
适配两种场景的正则写法如下:\d+A(?=(?(?=.* X ).* X |.*$))
逻辑说明
- 基础匹配规则为
\d+A,即匹配后缀为A的数字序列 - 后置正向预查做分支判断:
- 先判断完整字符串中是否存在
X模式 - 若存在
X:仅匹配后方包含X的\d+A,即所有在第一个X之前的符合规则的内容 - 若不存在
X:无额外限制,匹配所有符合\d+A规则的内容
- 先判断完整字符串中是否存在
适配场景验证
- 字符串包含
X:输入"50A ABC DE 51A FG X 52A HI 53A",匹配结果为50A、51A - 字符串不包含
X:输入"50A ABC DE 51A FG 52A HI 53A",匹配结果为50A、51A、52A、53A
兼容写法(不支持条件正则的引擎可用)
\d+A(?=.*?(?: X |$))(?<! X [\s\S]*)
内容的提问来源于stack exchange,提问作者Fabio Correa
相关产品推荐
相关产品推荐

