2011-06-15 124 views
11

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

我有以下字符串:

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

我想要得到的字符串http://yahoo.com/img1.jpg alt=""之外。 如何使用正则表达式来实现这一点?

+1

.NET? PHP的?几度夕阳红? – rerun 2011-06-15 06:14:14

+0

在java中使用正则表达式 – Ammu 2011-06-15 06:17:55

+1

您是否总是希望使用alt标签? – Kaj 2011-06-15 06:33:04

回答

10

我不知道你为什么要alt标签,但是这个正则表达式可以做你想要的: 组1是url,组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="" 
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); 
+0

当寻找'>' – Kaj 2011-06-15 06:28:51

+0

@Kaj时,模式太贪婪:谢谢!我修改了正则表达式 – MarcoS 2011-06-15 06:40:04

+0

很酷,我可以对你投票:) – Kaj 2011-06-15 06:46:44

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=""

+0

我不知道如何阅读这篇文章的帖子,但他的例子显示他也想要alt标签。 (不知道为什么,也不知道他为什么要这个标签,而不仅仅是alt标签的值) – Kaj 2011-06-15 06:46:10

+0

@Kaj - 我明白了,但是我跳过了那部分,因为*链接url的混合*和'alt'属性(xml符号中的名称和值)闻起来像打字错误;) – 2011-06-15 06:51:49

相关问题