我正在尝试编写一个匹配一个没有一些字符集的正则表达式。
例如,它与[ a-zA-Z]*
匹配,但不包括i,o,q,I,O,Q
。
所以:“肥猫”匹配,“男孩”不匹配。
看起来可能是[ a-hj-npr-zA-HJ-NPR-Z]*
。
是否有更简单的版本?
顺便说一下,我在PostgreSQL
中使用它,但我认为它应该是标准表达式。
答案 0 :(得分:1)
您可以使用否定前瞻作为Postgresql support lookaheads:
(?![ioqIOQ])[A-Za-z ]
使其与完整的线路匹配使用:
^(?:(?![ioqIOQ])[A-Za-z ])+$
答案 1 :(得分:1)
根据@ Anubhava的回答,但扩展到整个字符串而不只是一个字符,
^(?=[^ioqIOQ]*$)[ A-Za-z]*$
(?=...)
是一个积极的前瞻 - 与Anubhava的答案中的负向前瞻相反。我们要求所有匹配也匹配约束[^ioqIOQ]
。
您还可以使用
在整个字符串上实现重复^((?![ioqIOQ])[ A-Za-z])*$
但似乎效率低得多。 (不过,我没有表现出任何时间。)
答案 2 :(得分:1)