Java 正则表达式匹配不包含任何顺序的多个整字的行
我需要使用AND排除同一行上的两个字符串。但我不能应用适当的正则表达式。请帮忙 在下面的例子中,我想排除“坏词”和“测试”这两个词。 测试字符串:Java 正则表达式匹配不包含任何顺序的多个整字的行,java,regex,xcode,logic,Java,Regex,Xcode,Logic,我需要使用AND排除同一行上的两个字符串。但我不能应用适当的正则表达式。请帮忙 在下面的例子中,我想排除“坏词”和“测试”这两个词。 测试字符串: ghjghj badword test ghjghj one two abadwords three 使用的正则表达式是:^((?!badword)。*((?!test)。)*$这似乎起到了作用: ^(?!.*\bbadword\b)(?!.*\btest\b).*$ 要匹配不包含多个整词的行,您可以在起始处锚定的行中使用交替,也可以使用多个负像
ghjghj badword test ghjghj
one two
abadwords
three
使用的正则表达式是:
^((?!badword)。*((?!test)。)*$
这似乎起到了作用:
^(?!.*\bbadword\b)(?!.*\btest\b).*$
要匹配不包含多个整词的行,您可以在起始处锚定的行中使用交替,也可以使用多个负像头,每个负像头包含一个整词匹配模式:
^(?!.*\b(?:badword|test)\b).*$
或
看。您可能需要使用多行修改器使^
和$
匹配行的开始/结束
详细信息
-字符串/行的开头^
-如果在当前位置的右侧有0+个字符,而不是换行符,后跟单词边界、(?!.*\b(?:badword | test)\b)
或badword
子字符串,然后是单词边界,则会导致匹配失败test
-则具有除换行符以外的任何0+字符*
-字符串/行的结尾$
^(?。*badword)(?!.*test)。*$
。但是,这可以很容易地用带有contains
或indexOf
方法的非正则表达式方法来代替。@WiktorStribiżew:我得到了两个匹配项。字符串abadwords
也被排除在外,在我的例子中它是必需的。然后使用单词边界:^(?。*\bbadword\b)(?!.*\b测试\b)。*$
谢谢它的工作@普拉雅格看到了我的完整答案和解释。
^(?!.*\bbadword\b)(?!.*\btest\b).*$