正则表达式:找到不包含某些单词的部分

时间:2010-04-24 13:36:36

标签: php regex

如果它不包含{word1,word2,word3},我该怎么办? 我必须把 ^ 符号放在哪里? 我认为它必须看起来像这样

^([^word1|word2|word3])$

但它不起作用。 你能帮忙吗?感谢

2 个答案:

答案 0 :(得分:4)

正则表达式不是测试这些条件的最佳工具,但如果必须,那么可以使用negative lookaheads来完成:

^(?!.*word1)(?!.*word2)(?!.*word3).*$

您尝试执行的操作无效,因为[^...]是带有无序字符列表的负字符类。你写的内容相当于:

^([^123dorw|])$

另请注意,根据您的需要,您可能还希望在正则表达式中包含单词边界:

^(?!.*\bword1\b)(?!.*\bword2\b)(?!.*\bword3\b).*$

答案 1 :(得分:0)

我不熟悉在htaccess中使用正则表达式,所以我的想法可能有点高级别:

你尝试的看起来像: 如果句子包含 word1 | word2 | word3   然后做点什么

我会建议一个解决方案: 如果句子包含word1 | word2 | word3   然后什么都不做   其他做点什么

表示不要在“查询”中使用否定,而是在结果中使正则表达式更简单。