Java - Regex组匹配异常

时间:2014-12-09 10:01:39

标签: java regex exception pattern-matching extract

我试图在XML文件中创建一些模板,我想要使用以下语法的参数:

{%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_-]*%\\})" );

我首先检查字符串中是否存在参数,然后我尝试提取argmument的名称,然后用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 exps,他们似乎按照意图工作。 但由于某些原因,我在尝试使用group()提取参数名称时遇到异常:

java.lang.IllegalStateException: No successful match so far

这可能是什么原因?谢谢:))

1 个答案:

答案 0 :(得分:4)

问题似乎就在这一行:

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

在致电matcher#group()matcher#find()方法之前,无法致电matcher#matches()