【发布时间】:2011-09-15 06:35:48
【问题描述】:
如何使用正则表达式获取双引号内的字符串?
我有以下字符串:
<img src="http://yahoo.com/img1.jpg" alt="">
我想在外面获取字符串http://yahoo.com/img1.jpg alt=""。
如何使用正则表达式做到这一点?
【问题讨论】:
-
您是否也一直想要拥有 alt 标签?
如何使用正则表达式获取双引号内的字符串?
我有以下字符串:
<img src="http://yahoo.com/img1.jpg" alt="">
我想在外面获取字符串http://yahoo.com/img1.jpg alt=""。
如何使用正则表达式做到这一点?
【问题讨论】:
我不知道你为什么也想要 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=""
【讨论】:
你可以这样做:
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);
【讨论】:
>的时候太贪心了
alt=""部分匹配......我不知道为什么操作人员想要它。
这应该可以完成工作:
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());
解析器将获取每个字符 except " after src=" 和 before "
【讨论】:
alt 属性(xml 表示法中的名称和值)的混合闻起来像错字;)