簡體   English   中英

在字符串的特殊字符前添加轉義“\\”

[英]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

提前致謝

決定要轉義的特殊字符並調用

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

您可以將允許的所有特殊字符保留在某個數組中,然后迭代它並替換出現的示例。 此方法替換所有正則表達式元字符

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); 不要認為你會找到的任何圖書館會做更多的事情。 它充其量定義了一個完整的 specialCharacters 列表。

您需要使用\\\\\\引入字符串文字中; 那就是你需要逃避\\ (單個反斜杠用於將特殊字符引入字符串:例如\\t是制表符。)

query = "hello\\\\+Search\\\\}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, "\\\\$0");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM