当模式在行中找到时,Java正则表达式抛出异常,找不到匹配项

joh*_*ltb 9 java regex matcher

我正在试图弄清楚为什么正则表达式不匹配.任何帮助深表感谢.我将逐行浏览网页(工作正常),但我需要为每一行提取链接.应用程序将检查该行中是否有链接,但我需要实际提取URL.救命?

Pattern p = Pattern.compile("^.*href=\"([^\"]*)");
Matcher m = p.matcher(result);
String urlStr = m.group();
links.add(urlStr);
Run Code Online (Sandbox Code Playgroud)

我一直得到的错误信息是这样的:

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
Run Code Online (Sandbox Code Playgroud)

即使'result'中有一个链接引用(hxxp://www.yahoo.com).

links是一个ArrayList fyi.提前致谢!

Ser*_*rov 12

第一次打电话

m.find();
Run Code Online (Sandbox Code Playgroud)

要么

m.matches();
Run Code Online (Sandbox Code Playgroud)

m.group()如果matcher成功,你就可以使用它.

  • 小解释.为了能够调用`m.group`,我们首先需要在Matcher实例(`m`)上调用`find`或`matches`.另一个重要的事情是这些方法需要有积极的结果(它们必须返回true),所以`find`需要能够为正则表达式找到匹配单匹配,而`matches`需要能够确认整个输​​入可以由正则表达式匹配.否则将没有匹配,因此`group`中将没有任何内容,因此其状态将是非法的. (6认同)

joh*_*ltb 0

好吧,所以我想通了。唯一的问题是,我的正则表达式必须是

".*href=\"([^\"]*?)\".*"
Run Code Online (Sandbox Code Playgroud)

然后编写了代码

private String regex = ".*href=\"([^\"]*?)\".*";
private Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(result);
if (m.matches()) {
    String urlStr = m.group(1);
    links.add(urlStr);
}
Run Code Online (Sandbox Code Playgroud)

这就是我的正则表达式的问题,我必须使用“?” 我想不要贪婪!