正则表达式匹配 - 找不到匹配项

时间:2015-08-24 17:34:05

标签: java regex matcher

我正在尝试使用Regex从字符串中提取值并将其用于进一步处理。 我的字符串是:

String tring =Format_FRMT: <<<$gen>>>(((valu e)))    <<<$gen>>>(((value 13231)))
<<<$gen>>>(((value 13231)))

我所做的正则表达式是:

Pattern p = Pattern.compile("\\<{3}\\$([\\w ]+)\\>{3}\\s?\\({3}([\\w ]+)\\){3}");

当我运行整个程序时

Matcher m = p.matcher(tring);

   String[] try1 = new String[m.groupCount()];

    for(int i = 1 ; i<= m.groupCount();i++)
    {
        try1[i] = m.group(i);
        //System.out.println("group - i" +try1[i]+"\n");
    }

我正在

  

找不到匹配

有人可以帮我这个吗?究竟哪里出错了? 我的第一个目标只是看看我是否能够获得相应组中的值。如果工作正常,那么我想用它们进行进一步处理。

由于

2 个答案:

答案 0 :(得分:3)

以下是如何使用find()

获取所需的所有值的简要说明
String tring = "CHARDATA_FRMT: <<<$gen>>>(((valu e)))    <<<$gen>>>(((value 13231)))\n<<<$gen>>>(((value 13231)))";
Pattern p = Pattern.compile("<{3}\\$([\\w ]+)>{3}\\s?\\({3}([\\w ]+)\\){3}");
Matcher m = p.matcher(tring);
while (m.find()){
    System.out.println("Gen: " + m.group(1) + ", and value: " + m.group(2));
}

请参阅IDEONE demo

请注意,您不必在Java正则表达式中转义<>

答案 1 :(得分:2)

创建Cookie::$domain之后,在引用其组之前,您必须调用其中一种尝试实际匹配的方法,例如Matcherfind或{{1} }。例如:

matches

您应该阅读Matcher类上的javadoc,以确定上述哪种方法对您的数据和应用程序有意义。 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html