如何使用正则表达式在双引号内获取字符串?
我有以下字符串:
<img src="http://yahoo.com/img1.jpg" alt="">
我想在外面获取字符串http://yahoo.com/img1.jpg alt=""
。
我怎么能用正则表达式做到这一点?
答案 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>