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

标签 java regex query-string

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

问题 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/

相关文章:

java - 解析RecyclerView图像查询

java - Spring Boot 在 Chrome 中抛出 ERR_TOO_MANY_REDIRECTS

python - 删除多余的正则表达式?

java - EqualsBuilder 用作属性比较器

java - 我在 java 中的 endTime 有问题

javascript - 这个 JavaScript 正则表达式/[^\d.-] 是什么意思?

java - 使用模式在java中搜索和替换字符串

node.js - 多个 API QUERY_STRING、POST 请求的区别以及它们与 Postman 的使用

apache - 在调用 CGI 并且 URI 包含没有值的单个查询字符串参数时,Apache2 中是否存在特殊情况?

reactjs - 在 React Native 中使用 Fetch 获取查询字符串