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

Kri*_*mar 14 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>
Run Code Online (Sandbox Code Playgroud)

DMI*_*DMI 24

一种可能性:

String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
Run Code Online (Sandbox Code Playgroud)

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

<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]*>
Run Code Online (Sandbox Code Playgroud)

匹配:

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

注意事项:

  • 如果你想包含它src=,请将左侧的开放式支架向左移动:-)
  • 这并不关心平衡定界符或无定界符属性值,并且它也可以呛严重形成的属性(例如包括属性>包括或图像源'").
  • 使用像这样的正则表达式解析HTML是非常重要的,并且充其量只是在大多数情况下都适用的快速黑客.

  • 我很高兴在这个世界上存在的人不仅比我更了解正则表达式,而且还足以分享这种理解.这个正则表达式正是我所需要的.谢谢!!! (2认同)

cle*_*tus 17

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

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

正则表达式用于解析HTML.你最终会得到一个复杂的表达式,在某些特殊情况下出现意外行为.

编辑: 如果您的HTML很简单,那么:

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

并且有许多Java HTML解析器.

  • 说没有链接到解析器并不是很有用. (2认同)