需求:匹配包含foo但不包含bar的正则表达式
正则表达式:校验字符串包含
foo且不包含bar 没问题,这就给你搞定这个正则需求!直接上能用的表达式:
^(?=.*foo)(?!.*bar).*$
拆解一下每个部分的作用:
^和$:锚定字符串的开头和结尾,保证我们是对整个字符串做校验,不会漏掉前后的内容(?=.*foo):正向预断言,确保字符串里至少存在一处foo——.*表示任意字符可以出现任意次,所以foo能放在字符串的任何位置(?!.*bar):负向预断言,确保字符串里完全没有bar,不管bar出现在开头、中间还是结尾都不行.*:匹配字符串的剩余内容,前面的预断言已经完成了核心条件的校验,这部分只是把整个字符串覆盖到
用你的示例验证一下:
foo→ pass(包含foo,无bar)something only with foo→ pass(同上)with foo and bar→ fail(包含了bar)without fu but bar→ fail(没有foo还带了bar)abracadabra→ fail(既没foo也没bar)
额外小提示:
如果需要忽略大小写(比如Foo或者BAR也符合条件),可以根据你用的语言加上大小写不敏感的标志:
- JavaScript里:
/^(?=.*foo)(?!.*bar).*$/i - Python里:
re.compile(r'^(?=.*foo)(?!.*bar).*$', re.IGNORECASE)
内容的提问来源于stack exchange,提问作者Александ Палесика
相关产品推荐
相关产品推荐

