java - 正则表达式匹配java中的URL模式
问题描述
我正在尝试使用正则表达式从 url 中提取以下部分,但没有找到任何匹配项。谁能看看我做错了什么?
这是网址:
我想提取:
https://www.pinterest.com/pin/700943129497635499
我的代码是:
url="https://www.pinterest.com/pin/700943129497635499/sent/?invite_code=ba8f1ef48e1747199003308cdc92bbb9&sender=773000860950082435&sfo=1";
final Pattern pattern = Pattern.compile("https://www\\.pinterest\\.com/pin/.*/", Pattern.DOTALL);
final Matcher matcher = pattern.matcher(url);
url = matcher.group(1);
System.out.println(url);
它说java.lang.IllegalStateException: No successful match so far
解决方案
matcher.find()
您应该在使用之前调用matcher.group()
..*
导致包含匹配/sent/
部分的正则表达式。你可以https:\\/\\/www.pinterest.com\\/pin\\/\\w+
改用。\w
代表[a-zA-Z0-9_]
或您可以使用\d+
仅匹配数字值其他问题与
matcher.group(1)
部分有关。正则表达式中没有捕获组(...)
。所以如果你使用group(1)
那么你会得到一个例外。如果您使用带括号的正则表达式,(https:\\/\\/www.pinterest.com\\/pin\\/\\w+)
那么您可以使用matcher.group(1)
String url = "https://www.pinterest.com/pin/700943129497635499/sent/?invite_code=ba8f1ef48e1747199003308cdc92bbb9&sender=773000860950082435&sfo=1";
final Pattern pattern = Pattern.compile("https:\\/\\/www.pinterest.com\\/pin\\/\\w+");
final Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
url = matcher.group();
System.out.println(url);
}
输出:
https://www.pinterest.com/pin/700943129497635499
推荐阅读
- c++ - 什么是 std::false_type 或 std::true_type?
- linux - 为什么bash文本输出和下一个提示之间没有空格以及如何修复它?
- javascript - 扩展运算符在数组中添加带有键的元素
- excel - 使用 .find 根据 csv 文件中的列名返回列号
- php - 我如何动态更改下拉列表中复选框基础的值
- objective-c - 如何在推送的 ViewController (Xcode) 中获得后退按钮
- pandas - 从数据框中创建列字典(带有部分)
- json - Openlayers & NPM:无法加载本地 .json 文件
- javascript - Angular Material Datepicker如何将月份标签从格式MMM设置为格式MMMM(长)
- php - 从 PHP MySql 访问 $http.post 请求中的 JSON 数据