我对Java有点陌生,所以我不确定我是否正在做他们应该做的事情。我正在开发一个程序,该程序更多地用于学习 Java,并且被认为是命令行使用。其中一个功能应该是一种搜索替换。
从命令行启动程序,如下所示:
java -jar pro.jar -s ${ftp://www.stuff.com} -r foo
意思是:搜索确切的字符串${ftp://www.stuff.com}
并将其替换为foo
. 我想用正则表达式搜索,所以我必须在搜索字符串中转义转义字符($、(、{、}、\、...)。
${ftp://www.stuff.com} --> \$\{ftp:\/\/www\.stuff\.com\}
因此我写了这个函数:
private static Pattern getSearchPattern()
{
String searchArg = cli.getOptionValue( "s" ).trim();
StringBuffer escapedSearch = new StringBuffer();
Pattern metas = Pattern.compile( "([\\.\\?\\*\\{\\}\\[\\]\\(\\)\\^\\$\\+\\|\\\\])" );
Matcher metaMatcher = metas.matcher( searchArg );
while( metaMatcher.find() )
{
metaMatcher.appendReplacement(escapedSearch, "\\\\\\\\$0" );
}
metaMatcher.appendTail( escapedSearch );
return Pattern.compile( escapedSearch.toString() );
}
总而言之,这项工作,但有这么多的反斜杠。这是否逃脱了所有的metachrackters?这是一个“稳健”的解决方案吗?