Java - 正则表达式组匹配异常

Vir*_*721 4 java regex exception extract pattern-matching

我正在尝试在 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_-]*%\\})" );
Run Code Online (Sandbox Code Playgroud)

我首先检查字符串中是否存在参数,然后尝试提取参数的名称,然后将整个模式替换为 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

java.lang.IllegalStateException: No successful match so far
Run Code Online (Sandbox Code Playgroud)

这是什么原因造成的?谢谢 :)

anu*_*ava 5

问题似乎在这一行:

String argName = _getArgNamePattern.matcher( attr ).group( 1 );
Run Code Online (Sandbox Code Playgroud)

不能拨打matcher#group()电话之前matcher#find()matcher#matches()方法。