在字符串的特殊字符前添加转义“\”
Add escape "\" in front of special character for a string
我有一个简单的 SQL 查询,我在其中检查查询是否与我拥有的任何字段匹配。我为此使用 LIKE 语句。我的字段之一可以有特殊字符,搜索查询也是如此。所以我正在寻找一个解决方案,我需要在特殊字符前面转义“\”。
query = "hello+Search}query"
我需要把上面的改成
query = "hello\+Search\}query"
除了分别搜索每个特殊字符并添加“\”之外,是否有一种简单的方法可以做到这一点。因为如果我没有转义字符,我会收到错误消息
java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
提前致谢
您需要使用\
将\
引入字符串字面量;那就是你需要转义 \
。 (单个反斜杠用于在字符串中引入特殊字符:例如 \t
是制表符。)
query = "hello\+Search\}query"
就是你所需要的。
确定要转义哪些特殊字符,然后调用
query.replace("}", "\}")
您可以将允许的所有特殊字符保留在某个数组中,然后对其进行迭代并替换出现的示例。
此方法替换所有 regex meta characters.
public String escapeMetaCharacters(String inputString){
final String[] metaCharacters = {"\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"};
for (int i = 0 ; i < metaCharacters.length ; i++){
if(inputString.contains(metaCharacters[i])){
inputString = inputString.replace(metaCharacters[i],"\"+metaCharacters[i]);
}
}
return inputString;
}
您可以将其用作 query=escapeMetaCharacters(query);
不要认为您会找到的任何图书馆都可以做更多的事情。它充其量定义了一个完整的特殊字符列表。
我不得不在 javascript 中做同样的事情。我想出了以下解决方案。我认为这可能对某人有所帮助。
function escapeSpecialCharacters(s){
let arr = s.split('');
arr = arr.map(function(d){
return d.replace(/[-\/\^$*+?.()|[\]{}]/g, '\'+d)
});
let reg = new RegExp(arr.join(''));
return reg;
}
let newstring = escapeSpecialCharacters("hello+Search}query");
如果您想使用 Java 8+ 和 Streams,您可以这样做:
private String escapeSpecialCharacters(String input) {
List<String> specialCharacters = Lists.newArrayList("\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%");
return Arrays.stream(input.split("")).map((c) -> {
if (specialCharacters.contains(c)) return "\" + c;
else return c;
}).collect(Collectors.joining());
}
实际上有一种更好的方法可以以圆滑的方式做到这一点。
String REGEX = "[\[+\]+:{}^~?\\/()><=\"!]";
StringUtils.replaceAll(inputString, REGEX, "\\[=10=]");
我有一个简单的 SQL 查询,我在其中检查查询是否与我拥有的任何字段匹配。我为此使用 LIKE 语句。我的字段之一可以有特殊字符,搜索查询也是如此。所以我正在寻找一个解决方案,我需要在特殊字符前面转义“\”。
query = "hello+Search}query"
我需要把上面的改成
query = "hello\+Search\}query"
除了分别搜索每个特殊字符并添加“\”之外,是否有一种简单的方法可以做到这一点。因为如果我没有转义字符,我会收到错误消息
java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
提前致谢
您需要使用\
将\
引入字符串字面量;那就是你需要转义 \
。 (单个反斜杠用于在字符串中引入特殊字符:例如 \t
是制表符。)
query = "hello\+Search\}query"
就是你所需要的。
确定要转义哪些特殊字符,然后调用
query.replace("}", "\}")
您可以将允许的所有特殊字符保留在某个数组中,然后对其进行迭代并替换出现的示例。 此方法替换所有 regex meta characters.
public String escapeMetaCharacters(String inputString){
final String[] metaCharacters = {"\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%"};
for (int i = 0 ; i < metaCharacters.length ; i++){
if(inputString.contains(metaCharacters[i])){
inputString = inputString.replace(metaCharacters[i],"\"+metaCharacters[i]);
}
}
return inputString;
}
您可以将其用作 query=escapeMetaCharacters(query);
不要认为您会找到的任何图书馆都可以做更多的事情。它充其量定义了一个完整的特殊字符列表。
我不得不在 javascript 中做同样的事情。我想出了以下解决方案。我认为这可能对某人有所帮助。
function escapeSpecialCharacters(s){
let arr = s.split('');
arr = arr.map(function(d){
return d.replace(/[-\/\^$*+?.()|[\]{}]/g, '\'+d)
});
let reg = new RegExp(arr.join(''));
return reg;
}
let newstring = escapeSpecialCharacters("hello+Search}query");
如果您想使用 Java 8+ 和 Streams,您可以这样做:
private String escapeSpecialCharacters(String input) {
List<String> specialCharacters = Lists.newArrayList("\","^","$","{","}","[","]","(",")",".","*","+","?","|","<",">","-","&","%");
return Arrays.stream(input.split("")).map((c) -> {
if (specialCharacters.contains(c)) return "\" + c;
else return c;
}).collect(Collectors.joining());
}
实际上有一种更好的方法可以以圆滑的方式做到这一点。
String REGEX = "[\[+\]+:{}^~?\\/()><=\"!]";
StringUtils.replaceAll(inputString, REGEX, "\\[=10=]");