如何编写正则表达式匹配包含指定字符范围全部字符的字符串
正则表达式匹配方案
你需要的正则写法如下:
^(?=.*a)(?=.*b)(?=.*c).*$
规则解释
^定位到行的起始位置,确保校验是针对整行生效(?=.*a)正向前瞻断言,检查整行的任意位置存在字符a,断言不会消耗匹配位置,不影响后续其他规则的校验(?=.*b)同上,检查整行存在字符b(?=.*c)同上,检查整行存在字符c.*匹配任意数量的任意字符,覆盖行内除a/b/c之外的其他内容$定位到行的结束位置
原正则问题说明
你之前使用的[abc]+\s仅会匹配连续出现的a/b/c字符加空白,只会校验行中存在a/b/c中的任意字符,不会要求三个字符同时出现,因此会命中仅包含a、b的abab行。
测试用例匹配结果
对应你给出的测试内容,匹配效果如下:
abcb:同时包含a、b、c → 匹配成功abab:缺少字符c → 匹配失败abcd:同时包含a、b、c → 匹配成功abdd:缺少字符c → 匹配失败
完全符合你需要匹配第1、3行的需求。
补充说明
如果需要匹配不区分大小写的a/b/c,开启正则的不区分大小写模式(i标记)即可。
内容的提问来源于stack exchange,提问作者zest16
相关产品推荐
相关产品推荐

