首页 > 解决方案 > java regex pattern.compile Vs 匹配器

问题描述

我试图使用 java.regex.patterns 查找一个单词是否包含连续相同的字符串,同时使用匹配器测试正则表达式,它返回 true。但是如果我只这样使用: System.out.println("test:" + scanner.hasNext(Pattern.compile("(a-z)\\1"))); 它返回false。

public static void test2() {
String[] strings = { "Dauresselam", "slab", "fuss", "boolean", "clap", "tellme" };

String regex = "([a-z])\\1";
Pattern pattern = Pattern.compile(regex);
for (String string : strings) {
    Matcher matcher = pattern.matcher(string);
    if (matcher.find()) {
        System.out.println(string);
    }
}
}

这返回真。哪一个是正确的。

标签: regexjava.util.scanner

解决方案


该模式([a-z])\\1使用捕获组来匹配单个小写字符,然后对组 1 中捕获的内容进行反向引用。

例如,如果您有Dauresselam,它将匹配s捕获组中的第一个,然后匹配第二个s。因此,如果您想匹配连续的字符,您可以使用该模式。

该模式(a-z)\\1使用捕获组进行a-z字面匹配,然后使用对组 1 中捕获的内容的反向引用。所以这将匹配a-za-z


推荐阅读