开发者社区> 问答> 正文

Java正则表达式仅替换字符串(url)的一部分

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

  • /users/12345 变成 /users/XXXXX
  • /users/234567/summary 变成 /users/XXXXXX/summary
  • /api/v1/summary/5678 变成 /api/v1/summary/XXXX
  • http://example.com/api/v1/summary/5678/single 变成 http://example.com/api/v1/summary/XXXX/single

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

到目前为止,在大多数情况下,我只有以下几种似乎可行:

input.replaceAll("/[\\d]+$", "/XXXXX").replaceAll("/[\\d]+/", "/XXXXX/"); 但这有两个问题:

替换大小与原始字符串长度不匹配。 替换字符是硬编码的。 有一个更好的方法吗?

问题来源:Stack Overflow

展开
收起
montos 2020-03-22 08:59:21 1457 0
1 条回答
写回答
取消 提交回答
  • 在Java中,您可以使用:

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

    正则表达式详细信息:

    • \G 在上一场比赛的末尾或首场比赛的字符串开头声明位置。
    • (/|(?!^)\G):/捕获组#1中的上一场比赛或比赛的结束(但不是开始)
    • \d:匹配一个数字
    • (?=\d*(?:/|$)):确保数字后跟a /或末尾。
    • 替换:: $1X将其替换为捕获组#1,然后是X

    回答来源:Stack Overflow

    2020-03-22 09:00:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载