微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决你如何在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。