如何让正向前瞻(positive lookahead)按顺序匹配a和b字符?
问题原因
你当前使用的正则^(?=.*?a)(?=.*?b).+$的两个正向前瞻是独立校验逻辑,仅验证字符串中同时存在a和b两个字符,不限制二者的出现顺序,因此会命中b在前a在后的字符串,出现误匹配。
解决方案
你只需要将顺序约束写入同一个前瞻规则即可,修改后的正则如下:
^(?=.*?a.*?b).+$
如果不需要额外保留前瞻结构,也可以直接写更简洁的匹配规则,效果完全一致:
^.*?a.*?b.*$
匹配验证
结合你启用的i(大小写不敏感)、m(多行匹配)标志,上述正则的匹配结果完全符合要求:
- 可正确匹配:
ab、a.b、aB.、a.b.等所有a出现在b之前的字符串 - 可正确拒绝匹配:单独
a、单独b、ba、b.a、Ba.、b.a.等不符合顺序要求或者缺少字符的字符串
内容的提问来源于stack exchange,提问作者Efthymios
相关产品推荐
相关产品推荐

