Java-Regexp组匹配异常
我正在尝试在XML文件中创建一些模板,并且我希望有以下语法的参数:Java-Regexp组匹配异常,java,regex,exception,pattern-matching,extract,Java,Regex,Exception,Pattern Matching,Extract,我正在尝试在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_-]*)%\\}" ); pri
{%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()提取参数名称时遇到了一个异常:
这是什么原因?谢谢:)问题似乎出在这条线上:
String argName = _getArgNamePattern.matcher( attr ).group( 1 );
在调用
matcher#find()
或matcher#matches()
方法之前,您不能调用matcher#group()
。谢谢您的帮助!我想我可以摆脱第一种模式。编辑:它可以工作。你无法摆脱它,否则你将如何填充argName
?在使用组之前,只需按我的建议调用find
或matches
。还要注意args.get(argName)
它可能包含$
或\个字符。是的。我还可以去掉第一个regexp。谢谢
String argName = _getArgNamePattern.matcher( attr ).group( 1 );