问题描述
基本上,如果字符串包含“word”并且后跟一个数字,我想使用正则表达式返回false,即如果“theword1”、“theword2”、“theword5”等返回false
但是,如果它只是没有数字的“theword”或像“apple5”这样的完全不同的字符串,我仍然希望它返回true - 单词和数字必须在一起才能返回false。我知道它可以做到,但我真的被卡住了。
这是我迄今为止尝试过的(不起作用):
str.matches(".*([word][^1-9])*.*")
我的逻辑是 0 个或多个字符 (.*)
单词不是在出现 0 次或多次 (([word][^1-9])*)
的数字旁边,然后是 0 个或多个字符。
解决方法
您尝试的模式 [word][^1-9]
包含 2 个字符类。它将首先匹配单个字符,其中一个 w
o
r
d
后跟一个非数字 1-9 的单个字符
您可以通过断言字符串中的非单词后跟数字来排除匹配。
^(?!.*word\d).+
,
当后面没有数字时匹配“word”,作为一个负面的前瞻:
boolean hasUnnumberedWord(String str,String word) {
return str.matches(".*" + word + "(?!\\d).*");
}
如果“word”可能包含在正则表达式中具有特殊含义的字符,请使用 Pattern.quote(word)
或 word
。