Java-Regexp组匹配异常

我正在尝试在XML文件中创建一些模板,并且希望使用以下语法提供参数:

{%test%}其中“ test”是参数的名称.

private static final Pattern _hasArgPattern = Pattern.compile( "\\{%[a-zA-Z0-9_-]*%\\}" );

private static final Pattern _getArgNamePattern = Pattern.compile( "\\{%([a-zA-Z0-9_-]*)%\\}" );

private static final Pattern _replaceArgPattern = Pattern.compile( "(\\{%[a-zA-Z0-9_-]*%\\})" );

我首先检查字符串中是否存在参数,然后尝试提取参数的名称,然后将整个模式替换为HashMap中包含的参数值:

    if( _hasArgPattern.matcher( attr ).matches() )
    {
        String argName = _getArgNamePattern.matcher( attr ).group( 1 );

        if( ! args.containsKey( argName ) )
        {
            throw new Exception( "Argument \"" + argName + "\" not found." );
        }

        return _replaceArgPattern.matcher( attr ).replaceFirst( args.get( argName ) );
    }
    else
    {
        return attr;
    }

我在一个在线reg exp测试仪上测试了我的reg exp,它们似乎按预期工作.
但是由于某些原因,尝试使用group()提取参数名称时出现异常:

java.lang.IllegalStateException: No successful match so far

这是什么原因?谢谢 :)

解决方法:

问题似乎在这条线上:

String argName = _getArgNamePattern.matcher( attr ).group( 1 );

您不能在调用matcher#find()或matcher#matches()方法之前调用matcher#group().

上一篇:利用Apr算法做关联性分析:以对公众号推送的文章类型组合做出优化


下一篇:java-从XML节点提取度量