模式匹配java中的正则表达式

时间:2013-10-01 07:52:19

标签: java regex

我需要编写一个程序,将模式与行匹配,该模式可以是正则表达式或普通模式

例:
    如果模式是“老虎”,则只包含“老虎”的行应匹配
    如果pattern是“^ t”,那么以“t”开头的行应匹配

我这样做了:

  

Blockquote Pattern和Matcher类

问题在于,当我使用Matcher.find()时,所有正则表达式都匹配,但如果我提供完整模式,那么它就不匹配。

如果我使用matches(),那么只有完整的模式匹配,而不是正则表达式。

我的代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MatchesLooking 
{

    private static final String REGEX = "^f";
    private static final String INPUT =
    "fooooooooooooooooo";
    private static Pattern pattern;
    private static Matcher matcher;

    public static void main(String[] args) 
    {

        // Initialize
        pattern = Pattern.compile(REGEX);
        matcher = pattern.matcher(INPUT);

        System.out.println("Current REGEX is: "
                       + REGEX);
        System.out.println("Current INPUT is: "
                       + INPUT);

        System.out.println("find(): "
        + matcher.find());
        System.out.println("matches(): "
        + matcher.matches());
    }
}

2 个答案:

答案 0 :(得分:1)

matches给定^t的正则表达式只会在字符串只包含t时匹配。

您需要包含字符串的其余部分以便匹配。您可以通过附加.*来实现,这意味着零个或多个通配符。

"^t.*"

此外,使用^时,$(等效matches)是可选的。

我希望有所帮助,我不清楚你正在努力解决的问题。随意澄清。

答案 1 :(得分:0)

这就是Matcher的工作方式:

while (matcher.find()) {
    System.out.println(matcher.group());
}

如果你确定输入中只能有一个匹配,那么你也可以使用:

System.out.println("find(): " + matcher.find());
System.out.println("matches(): " + matcher.group());