开发时遇到一个需求,需要对一段文本中的所有正则符号进行转义,不然使用split分割方法分割文本的话无效,想到用替换来做,全部替换正则符号为转义后的符号
贴java实现代码:
1.测试版
public static void main(String[] args) {
String[] symbols = new String[] { "\\", "\/", "\[", "\]", "\(", "\)", "\{", "\}", "\?", "\+", "\*", "\|", "\.", "\^", "\$", "\-", "\^" };
String text = "adasdasd|||adasdasd|||adasdasd|||adasdasd---aa";
String delimiter = "---";
// for (char c : text.toCharArray()) {
// if(symbols.)
// }
long t1 = System.currentTimeMillis();
for (String s : symbols) {
// text = text.replaceAll(s, "\" + s);
// text = Pattern.compile(text).matcher(s).replaceAll("\" + s);
// System.out.println(Pattern.compile(text, Pattern.LITERAL).matcher(s).find());
// text.replace(s, "\" + s);
// System.out.println(delimiter.indexOf(s) != -1);
// if (delimiter.indexOf(s) != -1) {
// replaceAll方法用的是正则匹配,replace不是
delimiter = delimiter.replaceAll(s, "\" + s);
// }
}
long t2 = System.currentTimeMillis();
System.out.format("%s
耗时:%s", text, t2 - t1);
// split方法用的是正则匹配
String[] split = text.split(delimiter);
System.out.println(split.length);
}
2.正式版
/**
* 转义所有的正则符号
*
* @param s
* 文本
* @return 转义后的文本
*/
public static String escapeRegex(String s) {
String[] symbols = new String[] { "\\", "\/", "\[", "\]", "\(", "\)", "\{", "\}", "\?", "\+", "\*", "\|", "\.", "\^", "\$", "\-", "\^" };
// String text = "adasdasd|||adasdasd|||adasdasd|||adasdasd---aa";
// String delimiter = s;
if (s != null) {
for (String sym : symbols) {
s = s.replaceAll(sym, "\" + sym);
}
}
return s;
}