java双引号特殊字符_当⽂本⽤双引号括起时,转义⽂本中的
特殊字符
只有⼀个转义正则表达式的简单解决⽅案
您可以使⽤ if (s.startsWith("\"") && s.endsWith("\"")) 检查字符串是否同时包含前导和尾随 " ,如果是,则可以使⽤
replaceAll("^\"|\"$", "") 修剪前导和尾随 " ,然后使⽤转义正则表达式转义,然后再添加 " . 否则,只需要逃避你集合中的⾓⾊ .
String SPECIAL_REGEX_CHARS = "[()'\"\\[\\]*]";
String s = "\"te(st\""; // => "te\(st"
String result;
if (s.startsWith("\"") && s.endsWith("\"")) {
replaceall()result = "\"" + s.replaceAll("^\"|\"$", "").replaceAll(SPECIAL_REGEX_CHARS, "\\\\$0") + "\"";
}
else {
result = s.replaceAll(SPECIAL_REGEX_CHARS, "\\\\$0");
}
System.out.String());
使⽤appendReplacement“回调”的替代解决⽅案
以下是使⽤替换的⼀个正则表达式的⽅法:
String SPECIAL_REGEX_CHARS = "[()'\"\\[\\]*]";
//String s = "\"te(st\""; // => "te\(st"
//String s = "te(st"; // => te\(st
String s = "te\"st"; // => te\"st
StringBuffer result = new StringBuffer();
Matcher m = Patternpile("(?s)\"(.*)\"|(.*)").matcher(s);
if (m.matches()) {
if (m.group(1) == null) { // we have no quotes around
m.appendReplacement(result, m.group(2).replaceAll(SPECIAL_REGEX_CHARS, "\\\\\\\\$0"));
}
else {
m.appendReplacement(result, "\"" + m.group(1).replaceAll(SPECIAL_REGEX_CHARS, "\\\\\\\\$0") + "\"");
}
}
m.appendTail(result);
System.out.String());
要点:
使⽤带有2个备⽤分⽀的 (?s)\"(.*)\"|(.*) 正则表达式: ".*" 匹配以 " 开头并以 " 结尾的字符串(注意 (?s) 是DOTALL内联修饰符,允许匹配字符串与换⾏符序列)或 .* 替代匹配所有其他字符串 .
如果第⼀个选项匹配,我们只需替换第⼀个捕获组中选定的特殊字符,然后在两端添加 " .
如果匹配第⼆个备选⽅案,只需在整个第2组中添加转义符号即可 .
要替换为⽂字反斜杠,您需要在替换模式中使⽤ \\\\\\\\ .
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论