0

我有一些看起来像这样的主题:

hu ha ho hi

我的模式看起来像这样#^(h.+)$#

这将我所有的字符串都返回为true. 这是意料之中的。现在我只想选择不包含o.

如何向我的正则表达式添加否定条件?

4

4 回答 4

2

替换.[^o],它匹配除 之外的所有字符o

#^(h[^o]+)$#

表示一个字符类,[]前导^反转它。

于 2012-11-08T14:26:03.043 回答
1

您可以使用否定字符类添加否定条件

所以[^abcd]会匹配除a, b, c,之外的任何字符d

在您的情况下,它应该是[^o]..这将匹配任何字符,除了o

于 2012-11-08T14:27:13.707 回答
1

为确保字符串不包含o字符,请使用负前瞻

^(?!.*o)

因此,如果您想检查字符串是否以开头h并且没有o字符,请使用

^(?!.*o)h

其他选项是

^h[^o]+$

您必须使用行尾$来确保 h 之后的所有字符都不是o.

于 2012-11-08T14:42:01.170 回答
0

有什么理由需要正则表达式来进行简单的字符检测?

if (stripos($your_string, 'h') !== false) {
   ... there's an H in the string ...
}

会更有效率。

于 2012-11-08T14:41:51.447 回答