java - 用位于该字符串末尾的整数字符替换 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”与我的正则表达式不匹配,然后在替换后,这部分添加到匹配组中。
我完全是正则表达式的菜鸟,所以我请你帮忙。
解决方案
您可以使用
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+).*|.+"
.
推荐阅读
- python - Vlc Python 绑定无法设置时间
- laravel - Eloquent 查询不使用 where/first 条件。为什么?
- android - AOSP Android 中的永久后台服务?
- sql - 用于多个 UNION 的子集大表
- c# - 如何删除浏览器快速报告表中行之间的空白?
- python-3.x - 为什么在一些代码之后它会自动更改数据类型
- angular - 与 Laravel 一起使用时,如何在 Angular 等 Vuejs 中创建界面?
- c# - 如何在 LINQ to SQL 的第二次连接中使用第一次连接的结果
- java - 调用接口上不存在的实现方法
- typo3 - 使用 TYPO3 9.5.8 中的打字稿为 tx_news 生成讲话 url