【发布时间】:2016-04-06 14:37:09
【问题描述】:
我正在尝试替换查询中出现的字符串,如下所示:
SELECT * FROM DB WHERE AGE = 3 and NAME = 'VALUE'
我正在使用这个正则表达式:NAME\s*=\s*'[A-Z]+' 工作正常 here
这就是我在 Java 中尝试过的方式:
query.replaceAll("NAME\s*=\s*'[A-Z]+'", replacementString); // Gives me Invalid escape sequence message
query.replaceAll("NAME\\s*=\\s*'[A-Z]+'", replacementString);
Pattern pattern = Pattern.compile("NAME*= *'[A-Z]*'");
query.replaceAll(pattern.pattern(), replacementString);
Pattern pattern2 = Pattern.compile("NAME\\s*=\\s*'[A-Z]*'");
query.replaceAll(pattern2.pattern(), replacementString);
这些都不起作用。
如何替换 NAME = 'VALUE' 的出现?
【问题讨论】:
-
转义反斜杠:
\\s*修复“无效转义序列”错误。 -
注意事项:确保“VALUE”永远不包含
',否则简单的正则表达式就不够用了。 -
问题出在
query.replaceAll(pattern2.pattern(), replacementString);- 您需要将值分配给字符串变量。 -
VALUE 从不包含
' -
"NAME\\s*=\\s*'[A-Z]*'"可以使用。您也可以使用"NAME\\s*=\\s*'[^']*'"。如果您需要使用已编译的模式,请将其与 Matcher 一起使用,请参阅demo。但这只是一种增强。您的主要问题是修改后的值分配。