如何在正则表达式中排除某个单词?

时间:2013-03-08 23:32:23

标签: regex word

我正在使用这个表达式,它非常适合我需要的东西:

.*(cq|conquest).*

它返回任何单词/短语/句子/等。字母'cq'或'conquest'字样。但是,从这些比赛中我想排除所有包含“征服力量”一词的内容。

示例:

  • some conquest here应该匹配)
  • another cq with some conquest here应该匹配)
  • too much cq or conquest power is bad不应匹配)

我怎样才能对上面的正则表达式做到这一点?它必须只有一个正则表达式,否则我正在使用的程序(高级战斗追踪器)将创建两个不同的选项卡。

2 个答案:

答案 0 :(得分:1)

如果要匹配包含"conquest""cq"的任何字符串,但如果字符串包含"conquest power"则不匹配,那么正则表达式

^(?!.*conquest power).*?(?:cq|conquest).*

以上将尝试匹配从字符串的开头到行的结尾,如果要从每行的开头匹配,请在多行模式下切换(如果可用) - 将(?m)添加到开头正则表达式可能会这样做。

如果您希望匹配换行符,请将.更改为[\s\S],或者如果可用,请启用singleline模式。

你通过陈述“我想匹配'cq'或'征服'”来混淆人们,但“我希望正则表达式提取该行”

我假设你真的不想只匹配“cq”或“conquest”,你想匹配包含“cq”或“conquest”的字符串/行(?)

答案 1 :(得分:0)

original question我得到你想要匹配包含“cq”或“conquest”但不包含“power”的所有字符串。对于这种情况,以下正则表达式有效:

^([^p]|p(?!ower))*(cq|conquest)([^p]|p(?!ower))*$

regexpal