首页 > 解决方案 > Java Regex 仅替换部分字符串(url)

问题描述

我只想替换字符串的数字部分。大多数情况下,它要么是完整的 URL,要么是 URL 的一部分,但它也可以只是一个普通的字符串。

请注意,我不是1/api/v1

到目前为止,我只有以下在大多数情况下似乎有效的方法:

input.replaceAll("/[\\d]+$", "/XXXXX").replaceAll("/[\\d]+/", "/XXXXX/");

但这有两个问题:

有一个更好的方法吗?

标签: javaregex

解决方案


在 Java 中,您可以使用:

str = str.replaceAll("(/|(?!^)\\G)\\d(?=\\d*(?:/|$))", "$1X");

正则表达式演示

正则表达式详细信息:

  • \G在前一个匹配的结尾或第一个匹配的字符串的开头断言位置。
  • (/|(?!^)\\G):/捕获组 #1 中上一场比赛的比赛或结束(但不是在开始时)
  • \\d: 匹配一个数字
  • (?=\\d*(?:/|$)):确保数字后跟一个/或结束。
  • 替换: $1X : 用捕获组 #1 替换它,然后X

推荐阅读