【发布时间】:2016-02-15 09:23:20
【问题描述】:
我正在编写一个正则表达式来转义一些特殊字符,包括输入中的双引号。
输入可以用双引号括起来,并且不应转义。
输入示例:
"te(st", te(st, te"st
预期输出:
"te\(st", te\(st, te\"st
使用的代码:
String regex = "^\".*\"$";
String value = "\"strin'g\"";
Pattern SPECIAL_REGEX_CHARS = Pattern.compile("[()'"\\[\\]*]");
if (Pattern.matches(regex, value)){
String val = value.substring(1, value.length() -1);
String replaceAll = SPECIAL_REGEX_CHARS.matcher(val).replaceAll("\\\\$0");
replaceAll = "\""+replaceAll+"\"";
System.out.println(replaceAll);
}else {
String replaceAll = SPECIAL_REGEX_CHARS.matcher(value).replaceAll("\\\\$0");
System.out.println(replaceAll);
}
1 - 检查文本是否用双引号括起来。如果是,请转义文本中用双引号括起来的特殊字符。
2 - 否则。转义文本中的特殊字符。
任何可以结合#1和#2的正则表达式?
问候, 阿尼尔
【问题讨论】:
-
可以使用 1 个正则表达式的代码来完成。尽管如此,它仍需要一些额外的代码。
-
第三行无法编译。
-
能否请您分享正则表达式,使用条件正则表达式?我想试试这是更好的方法。不确定我的方法是否是标准方法。
-
尝试模式 SPECIAL_REGEX_CHARS = Pattern.compile("[()\"'\[\]*]");
-
你不希望 \ 也被转义吗?