正则表达式

时间:2014-09-27 12:41:44

标签: regex regex-negation

我正在努力学习处理正则表达式并进行一些练习但没有解决方案。一个问题是:所有小写单词除了' if'。

我能这样做吗:

[a-z][a-z]^[if] | [a-z][a-z][a-z]+

我希望一个单词至少包含两个字符。所以每个有三个或更多的单词都没关系。

3 个答案:

答案 0 :(得分:1)

嗯......完整的真正的解决方案就是这样的:

\b(?!if\b)\p{Ll}+\b

Demo

但我认为,好吧,"更高等级"你还没有学习的正则表达式。

所以,让我们保持简单。如果你可以接受忽略少于3个字符的单词,你可以这样写:

\b[a-hj-z][a-eg-z][a-z]+|i[a-z]{2,}

Demo

前两个字符类只是[a-z],分别没有if

如果您想要包含少于3个字符的单词,可以这样做:

\b(?:i|if[a-z]+|i[a-eg-z][a-z]*|[a-hj-z][a-z]*)\b

Demo

但此时它变得复杂......

答案 1 :(得分:1)

所有两个或多个小写字母的序列,除了"如果":

[a-hj-z][a-z]+|i(?:[a-eg-z][a-z]*|f[a-z]+)

负面预测,你也可以这样做:

(?!if\b)[a-z]{2,}

答案 2 :(得分:1)

一个简单的解决方案是将您想要忽略的内容放在交替运算符的左侧,并在您尝试时在交替运算符右侧的捕获组中放置您想要匹配的内容。

\bif\b|([a-z]{2,})

注意:字符类之外的插入符^并不意味着否定,它会在字符串开头处断言位置。除非您使用x(自由间距)修改器,否则需要删除交替之间的空格。