如何编写匹配q.?r但排除sqrtf的正则表达式?
正则表达式解决方案
最终可用正则
(?!.*sqrtf)(?:s?q.?r|q.?rtf?)
问题解决思路
- 前置的
(?!.*sqrtf)是负前瞻断言,直接排除所有包含sqrtf的字符串,彻底避免匹配该词内部的任何子串(包括之前漏判的qr) - 模式组覆盖所有合法匹配场景:
s?q.?r:匹配带/不带s前缀、q和r之间可插入任意单个字符的情况(对应sq.?r和q.?r)q.?rtf?:匹配q后跟可选单个字符、再跟rt或rtf的情况(对应q.?rt和q.?rtf)
- 用
(?:...)创建非捕获组,减少正则引擎的不必要开销
测试验证
✅ 匹配成功:qr、qmr、sqr、sqkr、qrt、qxt、qrtf、qzrtf
❌ 匹配失败:sqrtf、sqrtfxxx、xxsqrtf
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

