匹配模式以在match.find时忽略源中的空白区域

时间:2015-05-18 21:00:56

标签: java regex find whitespace matcher

我有一个模式String pageText="Hello World, How areyou doing"(没有空格)。并且搜索pattern代表"How are you"

Matcher matcher = pattern.matcher(pageText));
int count = 0;
while (matcher.find()) {
  count++;
}

counter正在返回0,因为我的pageText变量中缺少空格。

有没有办法忽略空格检查,应该能够找到“你好吗”模式的匹配?

1 个答案:

答案 0 :(得分:0)

最简单的方法之一可能是使用正则表达式模式中的\s*替换空格,使其看起来更像"How\\s*are\\s*you",因此它可以匹配Howareyou How areyou Howare you

String pageText="Hello World, How areyou doing";

Pattern pattern = Pattern.compile("How are you".replaceAll("\\s+","\\\\s*"));

Matcher matcher = pattern.matcher(pageText);
int count = 0;
while (matcher.find()) {
  count++;
}

System.out.println(count);

编辑:

由于您正在使用Pattern.quote来转义所有正则表达式特殊字符,因此添加\s*内容并不重要,因为它也会被转义。对此的简单解决方案是仅引用单词,因为只有它们可以具有需要转义的正则表达式元字符,因此我们正在寻找能够构建类似

的解决方案的解决方案。
quote(word1)\s*quote(word2)\s*quote(word3)

代码可能如下所示:

String pageText = "Hello World, How areyou doing";
String searchFor = "How are you";

String searchingRegex = Stream.of(searchFor.split("\\s+"))//stream of words
        .map(word -> Pattern.quote(word))//quote each word
        .collect(Collectors.joining("\\s*"));//join words with `\s*` delimiter

Pattern pattern = Pattern.compile(searchingRegex);
//...