简体   繁体   中英

Add escape “\” in front of special character for a string

I have a simple SQL query where I check whether the query matches any of the fields I have. I'm using LIKE statement for this. One of my field can have special characters and so does the search query. So I'm looking for a solution where I need to an escape "\\" in front of the special character.

query = "hello+Search}query"

I need the above to change to

query = "hello\+Search\}query"

Is there a simple way of doing this other than searching for each special character separately and adding the "\\". Because if I don't have the escape character I will get the error message

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0

Thanks in advance

Decide which special characters you want to escape and just call

query.replace("}", "\\}")

You may keep all special characters you allow in some array then iterate it and replace the occurrences as exemplified. This method replaces all 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;
}

You could use it as query=escapeMetaCharacters(query); Don't think that any library you would find would do anything more than that. At best it defines a complete list of specialCharacters.

You need to use \\\\ to introduce a \\ into a string literal; that is you need to escape the \\ . (A single backslash is used to introduce special characters into a string: eg \\t is a tab.)

query = "hello\\\\+Search\\\\}query" is what you need.

I had to do same thing in javascript. I came up with below solution. I think it might help someone.

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

If you want to use Java 8+ and Streams, you could do something like:

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());
}

There is actually a better way of doing this in a sleek manner.

String REGEX = "[\\[+\\]+:{}^~?\\\\/()><=\"!]";

StringUtils.replaceAll(inputString, REGEX, "\\\\$0");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM