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)
这是什么原因造成的?谢谢 :)
问题似乎在这一行:
String argName = _getArgNamePattern.matcher( attr ).group( 1 );
Run Code Online (Sandbox Code Playgroud)
你不能拨打matcher#group()电话之前matcher#find()或matcher#matches()方法。