gpt4 book ai didi

java - java中带双反斜杠的正则表达式

转载 作者:行者123 更新时间:2023-12-03 23:19:15 39 4
gpt4 key购买 nike

我想了解以下代码中正则表达式的概念:

private static final String SQL_INSERT = "INSERT INTO ${table}(${keys}) 
VALUES(${values})";
private static final String TABLE_REGEX = "\\$\\{table\\}";
.
.
.
String query = SQL_INSERT.replaceFirst(TABLE_REGEX, "tableName");

上面的代码工作正常,但我想了解如何。据我所知 $ 和 { 符号应该使用反斜杠在 java 字符串中转义,但在上面的字符串中没有反斜杠,如果我尝试添加它,它会显示错误:无效的转义序列。

还有为什么 TABLE_REGEX = "\\$\\{table\\}";包含双反斜杠?

最佳答案

${通常不需要在 Java 字符串文字中转义,但在正则表达式中它们需要转义,因为它们在正则表达式中具有特殊含义。 $匹配行尾和 {用于匹配字符一定次数。要匹配任何正则表达式特殊字符本身,这些字符需要进行转义。例如 A{5}匹配 AAAAA但是 A\{5匹配 A{5 .

要转义正则表达式字符串中的某些内容,您可以使用 \ .但是字符串文字中的反斜杠本身需要转义,这是由另一个 \ 完成的.那就是字符串文字 "\\{"实际上对应的是字符串"\{" .

这就是为什么在正则表达式字符串文字中您经常会遇到多个反斜杠的原因。您可能还想看看 Pattern.quote(String s) 它接受一个字符串并正确转义所有特殊字符(wrt. Java 正则表达式)。

基本上代替

private static final String TABLE_REGEX = "\\$\\{table\\}";

你可以写
private static final String TABLE_REGEX = Pattern.quote("${table}");

在您的示例中 SQL_INSERT.replaceFirst(TABLE_REGEX, "tableName");匹配第一次出现的 ${table}SQL_INSERT并将此事件替换为 tableName :
String sql = "INSERT INTO ${table}(${keys}) VALUES(${values})".replaceFirst("\\$\\{table\\}", "tableName");
boolean test = sql.equals("INSERT INTO tableName(${keys}) VALUES(${values})");
System.out.println(test); // will print 'true'

关于java - java中带双反斜杠的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478948/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com