无法将我的模式与Matcher.matches匹配

时间:2014-08-22 12:36:51

标签: java regex

我有以下模式/匹配器: -

Pattern pattern = Pattern.compile(".*'G3[IJC]{1}'.*");
Matcher matcher = null;

boolean matchFound = false;

String values = "";

for (int i = 0; i < attributes.getLength(); i++)
{
    values = attributes.getValue(i);
    matcher = pattern.matcher(values);

    if (matcher.matches())
    {
        matchFound = true;
        break;
    }
}

我试图在包含&#39; G3C&#39; G3I&#39;的XML文档中查找属性值。或者&#39; G3J&#39;但它不起作用。

我尝试了各种模式,例如&apos;G3[C|I|J]?&apos;和其他变体。

如果我使用notepad ++,这些模式在Regex查找功能中起作用。

如果我运行一个包含一些随机文本的字符串的简单java类,其中包含任何这些值,它可以工作,但如果我把它放在这个XML文档中并使用SaxParser读取它,那么,没有运气。

更新

由于某种原因无法发布示例XML。它没有出现在编辑器中。

虽然这样:

<SOMELEMENT = 'G3I' SOMETHINGELSE = 'G3J'>

我确实使用attributes.getValue(i)打印了所有信息,其中i被迭代并打印出我正在寻找的值,但正则表达式仍然找不到它们,但是当我以字符串形式传递它们时,正则表达式会找到值。

1 个答案:

答案 0 :(得分:1)

我怀疑如果您在多个可能的匹配项上进行迭代,则应将if (matcher.matches())替换为if (matcher.find())while (matcher.find())

Matcher.matches将使用Pattern从头到尾匹配整个输入。

在您的情况下,您可能希望在输入中找到Pattern 的一个或多个实例。