含依赖条件的正则匹配带$插入的b7字符串问题求解
正则匹配规则修正方案
问题根因
原有正则的漏洞出在$的优先级处理逻辑:$不属于前缀排除范围[^A-Za-z!],当!和b之间插入$时,前缀规则会直接匹配$,完全跳过对!的合法性校验,才会出现shot!$b7被误匹配的问题。
最终正则
(?<![A-Za-z])(?<!(?<!matrix)!)\$*b\$*7(?=\D|$)
规则拆解
- 核心匹配逻辑
\$*b\$*7:保留原有对任意位置插入$的b7串的匹配能力 - 前缀字母校验
(?<![A-Za-z]):确保目标串前面不能紧邻大小写英文字母,符合前缀不能包含英文字母的要求 - 感叹号规则
(?<!(?<!matrix)!):通过嵌套负向环视实现:如果目标串前方任意位置存在!,则!前面必须是完整单词matrix,不受!和b之间插入的$数量影响 - 后缀校验
(?=\D|$):确保目标串后面要么是非数字字符,要么是行尾,避免误匹配带后续数字的串如b71
测试验证
匹配成功用例
- 核心匹配用例:
b7、b$7、$b7、$b$7 - 合法前缀用例:
= b7、matrix!b7、ok?b7、_b7、matrix!$$$b$7
匹配失败用例
- 非法字母前缀:
bb7、ab$7 - 非法感叹号前缀:
ok!b7、= !b7、!b7、shot!$b7 - 非法后缀:
b72、$b$73
内容的提问来源于stack exchange,提问作者andio
相关产品推荐
相关产品推荐

