微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取字符串的正则表达式模式?

如何解决如何获取字符串的正则表达式模式?

在我的字符串中有很多替换需要完成,所以我在想是否我们可以得到正则表达式而不是手动替换每个单词,有什么办法可以用“\”替换任何单词?到“?”,示例如下所示有人可以帮助我使用正则表达式模式

    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]+(从 az 的小拉丁字母)以匹配所有可能的单词范围:

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

... 或者先使用 SetString#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 举报,一经查实,本站将立刻删除。