使用java正则表达式如何在字符串中的任何位置查找特定单词。我的需要是检查字符串" Google"包含" gooe"或不。 例如: -
字符串:Goolge
要找的词:gooe
字符串" Google"包含所有字符g,o,o,e然后它应该返回true。 如果字符串是" wikipedia"我要找的是" gooe"那么它应该返回false。 如何在这种情况下形成正则表达式..?
答案 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("(?!^)"));