正则表达式从HTML标记获取属性

时间:2009-07-03 13:44:29

标签: java regex

我正在寻找一个正则表达式,可以从java中的以下HTML片段中获取src(不区分大小写)标记。

<html><img src="kk.gif" alt="text"/></html>
<html><img src='kk.gif' alt="text"/></html>
<html><img src = "kk.gif" alt="text"/></html>

4 个答案:

答案 0 :(得分:24)

一种可能性:

String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";

是一种可能性(如果匹配不区分大小写)。这有点乱,故意忽略不使用引号的情况。表示它而不用担心字符串转义:

<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>

匹配:

  • <img
  • 一个或多个不是>的字符(即可能的其他属性)
  • src
  • 可选空格
  • =
  • 可选空格
  • 开始'"
  • 的分隔符
  • 图片来源(可能不包含单引号或双引号)
  • 结束分隔符
  • 虽然表达式可以在这里停止,但我添加了:
    • 零个或多个不是>的字符(更多可能的属性)
    • >关闭代码

需要注意的事项:

  • 如果您还要包含src=,请将左侧的开放式支架向左移动: - )
  • 这不关心分隔符平衡或没有分隔符的属性值,它也可以阻塞格式错误的属性(例如包含>的属性或包含'或{{的图像源1}})。
  • 使用像这样的正则表达式解析HTML是非常重要的,最好是在大多数情况下都能正常运行的快速黑客。

答案 1 :(得分:17)

这个问题在这里出现了很多。

正则表达式是处理此问题的错误方式。帮自己一个忙,并使用某种HTML解析器。

正则表达式解析HTML时不稳定。你最终会得到一个复杂的表达式,在发生的某些极端情况下会出现意外行为。

编辑: 如果您的HTML就这么简单:

Pattern p = Pattern.compile("src\\s*=\\s*([\\"'])?([^ \\"']*)");
Matcher m = p.matcher(str);
if (m.find()) {
  String src = m.group(2);
}

那里有any number of Java HTML parsers

答案 2 :(得分:1)

这个答案适用于谷歌搜索者,因为已经太晚了

复制克莱图斯显示错误和 修改他的答案并将修改后的字符串Pattern.compile作为传递到 String htmlString = "<div class=\"current\"><img src=\"img/HomePageImages/Paris.jpg\"></div>"; //Sample HTML String ptr= "src\\s*=\\s*([\"'])?([^\"']*)"; Pattern p = Pattern.compile(ptr); Matcher m = p.matcher(htmlString); if (m.find()) { String src = m.group(2); //Result } 的参数传递给我,

以下是完整示例

<label>
 <input type="checkbox" class="ck" name="event[]" id="event" value="<?php echo $row['name'];?>"><span>Wybierz</span>
 </label>

答案 3 :(得分:0)

你的意思是img-Tag的src属性?在这种情况下,您可以使用以下内容:

<[Ii][Mm][Gg]\\s*([Ss][Rr][Cc]\\s*=\\s*[\"'].*?[\"'])

那应该有用。表达式src ='...'是parantheses,因此它是一个匹配组,可以单独处理。