java - 正则表达式匹配超出应有的范围

标签 java regex

我正在这样做:

List<String> listOfLinks = new ArrayList<String>();

String regex = startMatch + "(.*)" + endMatch;
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(html);
    while (matcher.find()) {
        listOfLinks.add(matcher.group(1));
    }

其中正则表达式的值为:

class="thumb-link" href="(.*)" titl

我得到这个结果:

http://www.sportscraft.com.au/longline-vest--9344961510736.html" title="Longline Vest "> <img class="alpha" src="http://demandware.edgesuite.net/sits_pod19/dw/image/v2/AAJZ_PRD/on/demandware.static/Sites-Sportscraft-Site/Sites-sc-master/default/v1427554286311/images/hi-res/1102031_black_a.jpg?sw=180&amp;sh=215&amp;sm=fit" alt="Longline Vest , BLACK, hi-res" title="Longline Vest , BLACK" height="214" /> <img class="beta" src="http://demandware.edgesuite.net/sits_pod19/dw/image/v2/AAJZ_PRD/on/demandware.static/Sites-Sportscraft-Site/Sites-sc-master/default/v1427554286311/images/hi-res/1102031_black_b.jpg?sw=180&amp;sh=215&amp;sm=fit" alt="Longline Vest , BLACK, hi-res

当我想要的是:

http://www.sportscraft.com.au/longline-vest--9344961510736.html

这意味着,正则表达式 class="thumb-link" 的第一部分工作正常。但是第二部分"title在第一次匹配时并没有停止。它会继续下去,直到找到另一个匹配项。

当我在 http://myregexp.com/ 上测试时使用相同的正则表达式我得到了正确的结果。我想我需要设置一些选项来使这个“非贪婪”,但不确定是哪个,因为我无法在正则表达式测试器中重现错误。

最佳答案

尝试使用类似的东西:

String regex = "^(.*?[^ ]) .*?";//remove ^, i have tried on your input string.
Output:
[http://www.sportscraft.com.au/longline-vest--9344961510736.html"]

关于java - 正则表达式匹配超出应有的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29325990/

相关文章:

java - Android Robotium 测试,运行时异常无法从主应用程序线程调用此方法

java - 如何在 Java 中重复 if 条件?

java - 与输入匹配时包含 anchor ( $ ) 的正则表达式在以下程序中显示意外结果,为什么?

c# - 正则表达式如何匹配字符串末尾的下划线?

java - SL4J 配置更改或正则表达式以屏蔽 Json 中的电子邮件(由 '@' 和 '.com' 识别)

java - 正则表达式使用端口验证 url,需要澄清

java - 在 Java Swing 应用程序中实现 WebSocket

Java 初学者 : initializing class variables

php - 如何在 PHP 中获取以 '@' 开头的最后一个字符串和数字?

Spark 数据框列上的正则表达式