正则表达式测试负面模式不止一个字

时间:2013-12-10 12:01:25

标签: java regex

我正在尝试匹配文本中任何地方不包含两个单词的字符串文本。这些字词是ueui。我已经开始使用一个单词然后转到一个或另一个单词,但我不能用一个单词来说话。这是我到目前为止所尝试的:

^(?!ue)[A-Za-z\s]+(?<!ue)$

ue位于测试字符串的开头或结尾时,这种方法有效。所以在这样的情况下:

this is ue
ue is this

但不是在这种情况下,上面的正则表达式返回true,我不想要:

is ue really here

此外,我想避免将ue作为另一个字符串的一部分进行匹配,如下例所示:

this is not supposed toue match

我不想将其与正则表达式匹配,而是将其与此相匹配:

this is not supposed to ue match

区别在于ue是独立单词。我怎样才能修复上面的正则表达式?

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用否定前瞻:

^(?!.*\\bu[ei]\\b).*$   # use with singleline/dotall mode

另一种方式(性能更高):

^(?>[^u]++|\\Bu|u(?![ei]\\b))*$

答案 1 :(得分:1)

String regex = "(?:\\bue\\b|\\bui\\b)"

\\b是字边界的boundary matcher。这将匹配包含ueui的任何字符串。

这可以简化为:

String regex = "\\bu[ie]\\b"

@ Casimir的方法只有在你必须使用整个区域进行匹配时才需要,就像Matcher.matches()一样;但是,如果你使用Matcher.find()这样的东西,这会更简单,更快。

答案 2 :(得分:0)

你能不能把+更改为*,所以它可以处理没有与它相邻的字符?

做一个string.contains(“ue”)??

会不会更容易