正则表达式中的双引号

时间:2011-06-15 06:13:22

标签: java regex

如何使用正则表达式在双引号内获取字符串?

我有以下字符串:

<img src="http://yahoo.com/img1.jpg" alt="">

我想在外面获取字符串http://yahoo.com/img1.jpg alt=""。 我怎么能用正则表达式做到这一点?

3 个答案:

答案 0 :(得分:10)

我不知道为什么你也想要alt标签,但这个正则表达式可以满足您的需求: 第1组是网址,第2组是alt标记。如果img和src之间可以有多个空格,并且'='周围可以有空格,我可能会修改正则表达式。

Pattern p = Pattern.compile("<img src=\"([^\"]*)\" (alt=\"[^\"]*\")>");
Matcher m = 
    p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\"> " + 
    "<img src=\"http://yahoo.com/img2.jpg\" alt=\"\">");

while (m.find()) {
    System.out.println(m.group(1) + "  " + m.group(2));
}

输出:

http://yahoo.com/img1.jpg  alt=""
http://yahoo.com/img2.jpg  alt=""

答案 1 :(得分:8)

你可以这样做:

Pattern p = Pattern.compile("<img src=\"(.*?)\".*?>");
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">");
if (m.find())
  System.out.println(m.group(1));

但是,如果您正在解析HTML,请考虑使用某些库:正则表达式不是解析HTML的好主意。我对jsoup有很好的体验:这是一个例子:

String fragment = "<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">";
Document doc = Jsoup.parseBodyFragment(fragment);
Element img = doc.select("img").first();
String src = img.attr("src");
System.out.println(src);

答案 2 :(得分:2)

这应该做的工作:

String url = "";
Pattern p = Pattern.compile("(?<=src=\")[^\"]*(?=\")");
Matcher m = p.matcher("<img src=\"http://yahoo.com/img1.jpg\" alt=\"\">");
if (m.find())
    url = m.group());

解析器将在 "之后 src="之前 " {{1}} < / p>