首页 > 解决方案 > 用位于该字符串末尾的整数字符替换 URL 字符串

问题描述

我有一些 URL 链接,并尝试使用正则表达式在链接末尾用整数替换所有非整数值

URL类似于

https://some.storage.com/test123456.bucket.com/folder/80.png

我尝试使用的正则表达式:

Integer.parseInt(string.replaceAll(".*[^\\d](\\d+)", "$1"))

该正则表达式的输出是“80.png”,我只需要“80”。我也试过这个工具 - https://regex101.com。正如我所看到的主要问题是“.png”与我的正则表达式不匹配,然后在替换后,这部分添加到匹配组中。

我完全是正则表达式的菜鸟,所以我请你帮忙。

标签: javaregexandroid-studio

解决方案


您可以使用

String result = string.replaceAll("(?:.*\\D)?(\\d+).*", "$1");

请参阅正则表达式演示

注意:如果没有匹配,result则将等于该string值。如果您不希望这种行为,请"(?:.*\\D)?(\\d+).*"使用. 而不是"(?:.*\\D)?(\\d+).*|.+".

细节

  • (?:.*\D)?- 一个可选的(它必须是可选的,因为 Group 1 模式也可能在字符串的开头匹配)序列
    • .*- 除换行符以外的任何 0+ 个字符,尽可能多
    • \D- 非数字
  • (\d+)- 第一组:任何一位或多位数字
  • .*- 除换行符以外的任何 0+ 个字符,尽可能多

替换是$1,对 Group 1 值的反向引用,实际上是字符串中没有换行符的最后一个 1+ 数字块。

如果您在模式前加上内联 DOTALL 修饰符,则可以支持换行符(?s),即"(?s)(?:.*\\D)?(\\d+).*|.+".


推荐阅读