Regex 使用正则表达式进行字符串搜索

Regex 使用正则表达式进行字符串搜索,regex,string,search,Regex,String,Search,我正在尝试使用正则表达式(我刚刚开始)查找最多有1个不匹配字符的序列。例如,模式“nan”和文本“banana”,我想找到“ban”和“nan”,前者可以接受,但与“b”和“n”不匹配。我遇到的问题是,在创建正则表达式模式时,没有在需要的地方创建单独的通配符插入 final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"}; final String text = "banana"; for(String pat

我正在尝试使用正则表达式(我刚刚开始)查找最多有1个不匹配字符的序列。例如,模式“nan”和文本“banana”,我想找到“ban”和“nan”,前者可以接受,但与“b”和“n”不匹配。我遇到的问题是,在创建正则表达式模式时,没有在需要的地方创建单独的通配符插入

    final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"};
    final String text = "banana";

    for(String pattern : patterns)
    {
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);

        while(m.find())
        {
            System.out.println(m.start() + " " + m.group());
        }
    }

这是我作为一个测试,这是一种笨拙的方式得到我想要的(尽管有一些重复)。对于这种带有单个不匹配项的字符串搜索,正则表达式是一种有效的方法,还是应该尝试修改传统算法,如Horspool或KMP

不幸的是,正则表达式的设计允许您非常精确地匹配要匹配的模式,相反,几乎不支持近似匹配。然而,TRE库正是为此目的而设计的()