我试图在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
这可能是什么原因?谢谢:))
答案 0 :(得分:4)
问题似乎就在这一行:
String argName = _getArgNamePattern.matcher( attr ).group( 1 );
在致电matcher#group()
或matcher#find()
方法之前,无法致电matcher#matches()
。