我想只替换一个字符串中的数字部分。大多数情况下,它是完整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 请注意,我没有更改 /api/v1 中的 1。
到目前为止,我只发现以下代码可以在大多数情况下工作:
- /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 请注意,我没有更改 /api/v1 中的 1。
到目前为止,我只发现以下代码可以在大多数情况下工作:
input.replaceAll("/[\\d]+$", "/XXXXX").replaceAll("/[\\d]+/", "/XXXXX/");
但是这种方法存在两个问题:
- 替换后的长度与原始字符串长度不匹配。
- 替换字符是硬编码的。
有更好的解决方法吗?
(/|(?!^)\G)\d(?=\d*(?:/|$))
可以用来确保这一点,但是这种情况并没有在 OP 的要求中特别提到。 - anubhava