Java 如何获取字符串的正则表达式模式?
我的字符串中需要进行大量替换,因此我在想,如果我们可以获得正则表达式,而不是手动替换每个单词,是否有任何方法可以将任何单词替换为“\?”到“?”,示例如下所示,有人能帮我使用正则表达式模式吗Java 如何获取字符串的正则表达式模式?,java,regex,java-11,Java,Regex,Java 11,我的字符串中需要进行大量替换,因此我在想,如果我们可以获得正则表达式,而不是手动替换每个单词,是否有任何方法可以将任何单词替换为“\?”到“?”,示例如下所示,有人能帮我使用正则表达式模式吗 query = query.replaceAll("id\\?", "?"); query = query.replaceAll("name\\?", "?"); query = query.replac
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中为两个斜杠)转义\
和?
,因为它们都有特殊的含义,因此,匹配c\?
在Java正则表达式中结束,因为c\?
在正则表达式中使用Java\
字符,前4个斜杠字面上匹配,最后两个斜杠一起匹配\?
字符
考虑到上面的输入,您的代码应该如下所示:
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\\\\\\?", "?")
.replaceAll("name\\\\\\?", "?")
.replaceAll("value\\\\\\?", "?");
// 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
Set Set=Set.of(“id”、“name”、“empid”、“value”);
查询=查询
.replaceAll(String.format((%s)\\?),String.join(“|”,set)),“?”;
//a、b、c?EF?我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=?
尝试
query=query.replaceAll((\w)+\\\\?)+“,”?”代码>。它将用无效的转义序列(有效的转义序列是\b\t\n\f\r\“\'\\)@KaustubhKhareMake that(\\w)。不起作用,好的,谢谢..我会想出一些简单明了的答案谢谢@saka1029