如何解决如何获取字符串的正则表达式模式?
在我的字符串中有很多替换需要完成,所以我在想是否我们可以得到正则表达式而不是手动替换每个单词,有什么办法可以用“\”替换任何单词?到“?”,示例如下所示有人可以帮助我使用正则表达式模式
query = query.replaceAll("id\\?","?");
query = query.replaceAll("name\\?","?");
query = query.replaceAll("empid\\?","?");
query = query.replaceAll("value\\?","?");
解决方法
好吧,Java 中包含 something\?
的字符串看起来像:
String query = "a b c id\\? e f name\\? empid\\? i value\\? j";
您想用单个字符 \?
替换以 ?
结尾的任何字符串。在正则表达式中,您还需要使用另一个斜杠(在 Java 中为两个斜杠)对 \
和 ?
进行转义,因为它们都有特殊的含义,因此在 Java 正则表达式中匹配 c\?
最终为c\\\\\\?
其中前 4 个斜杠在使用 Java 的正则表达式中逐字匹配 \
字符,最后两个斜杠一起 \\?
逐字匹配 ?
字符。
考虑到上面的输入,你的代码应该是这样的:
query = query
.replaceAll("id\\\\\\?","?")
.replaceAll("name\\\\\\?","?")
.replaceAll("empid\\\\\\?","?")
.replaceAll("value\\\\\\?","?");
// a b c ? e f ? emp? i ? j
请注意,顺序很重要,因为即使在 id\?
的后缀中 ?
也会被 empid\?
替换,这不是您想要的,因为第一次替换您最终会得到仅限emp
。所以这对我来说看起来更正确:
query = query
.replaceAll("empid\\\\\\?","?")
.replaceAll("id\\\\\\?","?");
// a b c ? e f ? ? i ? j
您可能希望更改为 [a-z]+
(从 a
到 z
的小拉丁字母)以匹配所有可能的单词范围:
query = query.replaceAll("\\w+\\\\\\?","?");
// a b c ? e f ? ? i ? j
如果要匹配的单词数量有限,如果数量不多,您可能需要使用 |
将它们分开:
query = query
.replaceAll("(id|name|empid|value)\\\\\\?","?");
// a b c ? e f ? ? i ? j
... 或者先使用 Set
和 String#join(delimeter,iterable)
构建正则表达式,这在要匹配的单词数量较多时很有用:
Set<String> set = Set.of("id","name","empid","value");
query = query
.replaceAll(String.format("(%s)\\\\\\?",String.join("|",set)),"?");
// a b c ? e f ? ? i ? j
,
试试这个。
String query = "SELECT * FROM t WHERE id=id? AND name=name? AND empid=empid? AND value=value?";
query = query.replaceAll("\\w+\\?","?");
System.out.println(query);
输出:
SELECT * FROM t WHERE id=? AND name=? AND empid=? AND value=?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。