Java 正则表达式匹配不包含任何顺序的多个整字的行

Java 正则表达式匹配不包含任何顺序的多个整字的行,java,regex,xcode,logic,Java,Regex,Xcode,Logic,我需要使用AND排除同一行上的两个字符串。但我不能应用适当的正则表达式。请帮忙 在下面的例子中,我想排除“坏词”和“测试”这两个词。 测试字符串: ghjghj badword test ghjghj one two abadwords three 使用的正则表达式是:^((?!badword)。*((?!test)。)*$这似乎起到了作用: ^(?!.*\bbadword\b)(?!.*\btest\b).*$ 要匹配不包含多个整词的行,您可以在起始处锚定的行中使用交替,也可以使用多个负像

我需要使用AND排除同一行上的两个字符串。但我不能应用适当的正则表达式。请帮忙

在下面的例子中,我想排除“坏词”和“测试”这两个词。 测试字符串:

ghjghj badword test ghjghj
one two
abadwords
three

使用的正则表达式是:
^((?!badword)。*((?!test)。)*$

这似乎起到了作用:

^(?!.*\bbadword\b)(?!.*\btest\b).*$

要匹配不包含多个整词的行,您可以在起始处锚定的行中使用交替,也可以使用多个负像头,每个负像头包含一个整词匹配模式:

^(?!.*\b(?:badword|test)\b).*$

看。您可能需要使用多行修改器使
^
$
匹配行的开始/结束

详细信息

  • ^
    -字符串/行的开头
  • (?!.*\b(?:badword | test)\b)
    -如果在当前位置的右侧有0+个字符,而不是换行符,后跟单词边界、
    badword
    test
    子字符串,然后是单词边界,则会导致匹配失败
  • *
    -则具有除换行符以外的任何0+字符
  • $
    -字符串/行的结尾

使用两个固定在开头的lookahead:
^(?。*badword)(?!.*test)。*$
。但是,这可以很容易地用带有
contains
indexOf
方法的非正则表达式方法来代替。@WiktorStribiżew:我得到了两个匹配项。字符串
abadwords
也被排除在外,在我的例子中它是必需的。然后使用单词边界:
^(?。*\bbadword\b)(?!.*\b测试\b)。*$
谢谢它的工作@普拉雅格看到了我的完整答案和解释。
^(?!.*\bbadword\b)(?!.*\btest\b).*$