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