首页 > 解决方案 > 正则表达式匹配java中的URL模式

问题描述

我正在尝试使用正则表达式从 url 中提取以下部分,但没有找到任何匹配项。谁能看看我做错了什么?

这是网址:

https://www.pinterest.com/pin/700943129497635499/sent/?invite_code=ba8f1ef48e1747199003308cdc92bbb9&sender=773000860950082435&sfo=1

我想提取:

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

标签: javaregexpattern-matching

解决方案


  • 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

推荐阅读