我正在尝试匹配文本中任何地方不包含两个单词的字符串文本。这些字词是ue
和ui
。我已经开始使用一个单词然后转到一个或另一个单词,但我不能用一个单词来说话。这是我到目前为止所尝试的:
^(?!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
是独立单词。我怎样才能修复上面的正则表达式?
答案 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。这将匹配包含ue
或ui
的任何字符串。
这可以简化为:
String regex = "\\bu[ie]\\b"
@ Casimir的方法只有在你必须使用整个区域进行匹配时才需要,就像Matcher.matches()
一样;但是,如果你使用Matcher.find()
这样的东西,这会更简单,更快。
答案 2 :(得分:0)
你能不能把+更改为*,所以它可以处理没有与它相邻的字符?
做一个string.contains(“ue”)??
会不会更容易