正则If-then-else逻辑PubDSK匹配场景下Else分支无法替换问题求助
正则If-then-else分支失效修复方案
- 失效原因
原有正则存在两处逻辑缺陷:- 条件预查语句使用
.*匹配任意字符,.默认不匹配换行符,和主体匹配逻辑中[\s\S]的全字符匹配语义不一致,存在换行的场景下会导致条件判断结果错误 - 两个分支的匹配规则均未添加字符串结尾锚点
$,正则可能仅匹配部分字符串就终止,替换时没有覆盖完整输入内容,表现为否定分支不生效
- 条件预查语句使用
- 修复后的精简正则表达式
无需重复编写两次主体匹配逻辑,仅对差异的前缀跳过长度做条件判断即可,兼容绝大多数支持If-then-else语法的正则引擎:
替换时直接引用捕获组^(?(?=[\s\S]*PubDSK)[\s\S]{24}|[\s\S]{48})(?=.{10}([\s\S]*))0*(.*?)(?=\1)[\s\S]*$$2即可得到目标结果。
内容的提问来源于stack exchange,提问作者MrWeix
相关产品推荐
相关产品推荐

