public static Regex compile(String regexStr) {
StringBuilder additionalMessage = new StringBuilder();
RegexParser parser = regexParser( regexStr );
parser.getErrorListeners().clear();
parser.addErrorListener(
new BaseErrorListener() {
@Override
public void syntaxError(
Recognizer<?, ?> recognizer,
Object offendingSymbol,
int line,
int charPositionInLine,
String msg,
RecognitionException e) {
additionalMessage.append( "SyntaxEception in Regex: \"" )
.append( regexStr )
.append( "\": " )
.append( msg );
if ( offendingSymbol instanceof CommonToken ) {
CommonToken token = (CommonToken) offendingSymbol;
if ( token.getText().equals( "*" ) || token.getText().equals( "+" ) || token.getText()
.equals( "?" ) ) {
additionalMessage.append( ", dangling metacharacter: '" )
.append( ((CommonToken) offendingSymbol).getText() )
.append( "' at line " )
.append( token.getLine() )
.append( ", pos " )
.append( token.getCharPositionInLine() );
}
}
}
}
);
RegexParser.RegexContext regexTree = parser.regex();
if ( parser.getNumberOfSyntaxErrors() > 0 ) {
throw new IllegalArgumentException( "malformed regex found : " + regexStr + "\n" + additionalMessage.toString() );
}
ParseTreeWalker walker = new ParseTreeWalker();
RegexGroupNameListener nameListener = new RegexGroupNameListener();
walker.walk( nameListener, regexTree );
RegexTreeListener listener = new RegexTreeListener( nameListener.getGroupNames() );
walker.walk( listener, regexTree );
return listener.finalRegex();
}
RegexCompiler.java 文件源码
java
阅读 15
收藏 0
点赞 0
评论 0
项目:moar
作者:
评论列表
文章目录