正则表达式 - 不包括特定字符

时间:2014-08-20 14:14:30

标签: regex

我正在尝试编写一个匹配一个没有一些字符集的正则表达式。

例如,它与[ a-zA-Z]*匹配,但不包括i,o,q,I,O,Q

所以:“肥猫”匹配,“男孩”不匹配。

看起来可能是[ a-hj-npr-zA-HJ-NPR-Z]*

是否有更简单的版本?

顺便说一下,我在PostgreSQL中使用它,但我认为它应该是标准表达式。

3 个答案:

答案 0 :(得分:1)

您可以使用否定前瞻作为Postgresql support lookaheads

(?![ioqIOQ])[A-Za-z ]

使其与完整的线路匹配使用:

^(?:(?![ioqIOQ])[A-Za-z ])+$

RegEx Demo

答案 1 :(得分:1)

根据@ Anubhava的回答,但扩展到整个字符串而不只是一个字符,

^(?=[^ioqIOQ]*$)[ A-Za-z]*$

(?=...)是一个积极的前瞻 - 与Anubhava的答案中的负向前瞻相反。我们要求所有匹配也匹配约束[^ioqIOQ]

您还可以使用

在整个字符串上实现重复
^((?![ioqIOQ])[ A-Za-z])*$

但似乎效率低得多。 (不过,我没有表现出任何时间。)

答案 2 :(得分:1)

不需要花哨的前瞻/后卫只需使用更多但更小的字符范围。

您需要^[a-hj-npr-zA-HJ-NPR-Z ]*$之类的内容。

添加了一个匹配句子的空间

您可以在debuggex

在线查看此测试