如何匹配除几个字母外的所有字母?

10

我想匹配除了字母 a,e,i,o,u 以外的所有小写字母 [a-z].

使用否定字符集 [^aeiou]* 我可以匹配除了 a,e,i,o,u 之外的所有内容,但如何将我的“所有内容”限制为 [a-z] 呢?

在 XML Schema、XPath、.NET(2.0+)和 JGsoft 正则表达式中,可以使用字符类减法([a-z-[aeiou]])轻松实现此目的,但是如何在 PCRE 中实现呢?

1个回答

13

您可以使用负向先行断言。它就像是一种减法。

(?![aeiou])[a-z]
     ^        ^
     |        |
subtract    from

演示


太好了!..能否以组的形式捕获匹配项?我尝试过 (?![aeiou])([a-z])+? DEMO.. 匹配结果是单个字母。 - karthik manchala
你需要将整个正则表达式用括号括起来:((?![aeiou])[a-z]),如果是多个(一个或多个),则需要使用 ((?:(?![aeiou])[a-z])+)。我认为在第一个建议的正则表达式后面只加上一个 + 就可以了。 - Jonathan Leffler
@hwnd 是指除了 a,e,i,o,u 以外的字母。例如在这个 演示 中,bcdfghjklmnpqrstvwxyz 都是 @hwnd 字母。 - karthik manchala
这可以写成 ((?:(?![eiou])[b-z])+) - hwnd
谢谢!我正在尝试在Microsoft Word中使用通配符搜索。但是Word不接受从所有小写字母中排除i的语法:(?![i])[a-z]。感谢您的建议! - David.P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接