gpt4 book ai didi

java - 使用正则表达式替换java中的querystring属性值

转载 作者:行者123 更新时间:2023-11-30 11:25:03 28 4
gpt4 key购买 nike

我想替换查询字符串值,但它会产生一些问题:

问题 1:替换后删除“&”符号

String queryString = "?pid=1&name=Dell&cid=25";
String nQueryString=queryString.replaceAll("(?<=[?&;])pid=.*?($|[&;])","pid=23");
System.out.println(nQueryString);

上面例子的输出?pid=23name=Dell&cid=25

你可以看到它删除了 pid 之后的“&”

问题 2:如果我删除了“?”,它就不起作用了。来自 queryString 变量的符号。

String queryString = "pid=1&name=Dell&cid=25";
String nQueryString=queryString.replaceAll("(?<=[?&;])pid=.*?($|[&;])","pid=23");
System.out.println(nQueryString);

上面例子的输出?pid=1&name=Dell&cid=25

我们可以说正则表达式不起作用,所以任何人都可以建议我更好的正则表达式,它完全满足我的要求。

最佳答案

queryString.replaceAll("(?<=[?&;])pid=.*?(?=[&;])", "pid=23")

区别在于我使用的是正向先行:(?=[&;]),它是零长度的,使其成为原子的,并且实际上不包含在替换中replaceAll(),就像你原来的 positive-lookbehind 没有被替换一样。

或者,我们可以匹配直到找到 &;,但不包括在替换中,即:

queryString.replaceAll("(?<=[?&;])pid=[^&;]*", "pid=23")

[^&;] :^ 否定以下内容:&;,所以 [^&;]* 将匹配直到遇到 ;&

你的不起作用,因为 ($|[&;]) 是一个非原子组,特别是一个捕获组,因此包含在替换中。注意:非捕获组 (?:$|[&;]) 也会在这里失败。

最后要注意的是,您对 ?&; 使用了正向回顾,因此通过删除?,将不再匹配,这是有道理的。

关于java - 使用正则表达式替换java中的querystring属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472289/

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