正则表达式匹配器 - 未找到匹配项

Regex matcher - No match found

我正在尝试使用 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");
    }

我得到

No match found

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

谢谢

在创建 Matcher 之后引用其组之前,您必须调用尝试实际匹配的方法之一,例如 findmatcheslookingAt。例如:

Matcher m = p.matcher(tring);
if (!m.find()) return; // <---- Add something like this
String[] try1 = new String[m.groupCount()];

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

这里有一个例子,说明如何使用 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 正则表达式中转义 <>