在字符串的特殊字符前添加转义“\”

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=]");