나는 자바에 대해 약간 익숙하다. 그렇기 때문에 내가해야할 일을하고 있는지 잘 모르겠다. 나는 Java 목적을 배우기위한 것이고 명령 행 사용을 위해 생각되는 프로그램을 개발 중이다. 기능 중 하나는 대체 검색의 일종이어야합니다.RegExp에서 사용할 자바 이스케이프 문자열
명령 줄에서이 같은 프로그램 시작 :
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을 탈출합니까?
이
당신에게 그 가능성이 있는지는 모르겠지만 어쩌면 당신은 패턴을 받아들이고 그것을 항상 마지막으로 제공하는 단 하나의 논쟁이 있는지 확인할 수 있습니다. 커맨드 라인의 나머지 부분은 항상 당신의 논쟁이며, 정확하게이 작업을 위해 설계된'Pattern.quote'에 대해 – radai