使用java正则表达式如何在字符串中的任何位置查找特定单词?

时间:2016-10-03 10:15:14

标签: java regex string

使用java正则表达式如何在字符串中的任何位置查找特定单词。我的需要是检查字符串" Google"包含" gooe"或不。 例如: -

字符串:Goolge

要找的词:gooe

字符串" Google"包含所有字符g,o,o,e然后它应该返回true。 如果字符串是" wikipedia"我要找的是" gooe"那么它应该返回false。 如何在这种情况下形成正则表达式..?

3 个答案:

答案 0 :(得分:0)

如果你想在整个字符串中找到单词,你可以使用:

 "^(?=.*e)(?=.*o.*o)(?=.*g).*"

答案 1 :(得分:0)

我刚刚测试了这样的RegEx,它使用"预见":

(?=^.*g)(?=^.*o)(?=^.*e)

对于包含g,o和e的所有字符串,它应返回true,如果缺少任何这些字符,则返回false。

答案 2 :(得分:0)

你必须为每个字母建立一个积极的前瞻。如果gooe为搜索字词,我们的RegEx将是:

(?i)(?=.*g)(?=.*o)(?=.*o)(?=.*e)

很明显,我们有两个完全相同的前瞻。他们会在第二个o字母的位置满足,所以一个是多余的。在构建最终模式之前,您可以从搜索词中删除重复的字母。 (?i)设置了case-insensitivity标志。

String term = "Gooe";   // Search term
String word = "google"; // Against word `Google`

String pattern = "(?i)(?=.*" + String.join(")(?=.*", term.split("(?!^)")) + ")";
Pattern regex = Pattern.compile(pattern);
Matcher match = regex.matcher(word);
if (match.find()) {
    // Matched
}

请参阅demo here

如果订单很重要并且在寻找两个o时,两者都应该存在,那么我们的RegEx就是:

(?i).*?g.*?o.*?o.*?e

爪哇:

String pattern = "(?i).*?" + String.join(".*?", term.split("(?!^)"));