你如何在java中不能包含数字的单词上使用正则表达式?

问题描述

基本上,如果字符串包含“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).+

Regex demo

,

当后面没有数字时匹配“word”,作为一个负面的前瞻:

boolean hasUnnumberedWord(String str,String word) {
    return str.matches(".*" + word + "(?!\\d).*");
}

如果“word”可能包含在正则表达式中具有特殊含义的字符,请使用 Pattern.quote(word)word