Java正则表达式匹配url中的模式

标签 java regex

我有一堆共享以下模式的网址:

http://www.ebay.com/itm/Crosman-Pumpmaster-760-Pump-177-Pellet-4-5-mm-BB-Air-Rifle-Black-760B-/251635693266?pt=LH_DefaultDomain_0&hash=item3a96a7f6d2

我想提取item3a96a7f6d2http://www.ebay.com/itm/&hash= 是固定模式,而其间的字符串可以更改。我写道:

                String prodPatternString = "(http://www.ebay.com/itm/)(.*?)(hash=)(.*?)";
                Pattern prodPattern = Pattern.compile(prodPatternString);
                Matcher prodMatcher = prodPattern.matcher(prodUrl);
                while(prodMatcher.find()){
                    String pid = matcher.group(4);
                }

但它给了我一个错误,说“找不到匹配项”。任何帮助将不胜感激。谢谢。

最佳答案

您需要将 matcher.group(4); 行更改为 prodMatcher.group(4);,然后删除 ? 存在在最后一个捕获组内,因为 .*? 将对零个或多个字符进行非贪婪匹配,因此即使存在字符,它也会匹配空字符串,因为它是非贪婪形式。

String prodUrl = "http://www.ebay.com/itm/Crosman-Pumpmaster-760-Pump-177-Pellet-4-5-mm-BB-Air-Rifle-Black-760B-/251635693266?pt=LH_DefaultDomain_0&hash=item3a96a7f6d2";
String prodPatternString = "(http://www.ebay.com/itm/)(.*?)(hash=)(.*)";
Pattern prodPattern = Pattern.compile(prodPatternString);
Matcher prodMatcher = prodPattern.matcher(prodUrl);
while(prodMatcher.find()){
        String pid = prodMatcher.group(4);
        System.out.println(pid);
}

输出:

item3a96a7f6d2

关于Java正则表达式匹配url中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569133/

相关文章:

regex - 从单元格中提取唯一文本字符/表情符号的列表

python - 在用户提交的正则表达式中查找捕获组

java - Spring JPA 存储库删除方法不起作用

java - WooCommerce REST API 与 Android 电子商务应用程序

java - IllegalArgumentException : Invalid column latitude

java - 在多个标记上拆分带有嵌套括号的字符串

java - 如果多次匹配,有没有办法捕获每个组?

java - JGroups 未找到或加载主类

java - CF 中的十六进制对象

python - 重新使用与正则表达式匹配的用户输入字符串的一部分