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

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

text text text 

一种可能性:

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

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

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

匹配:

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

注意事项:

  • 如果你想包括src= ,请将左侧的开括号移动:-)
  • 这不关心分隔符平衡或没有分隔符的属性值,它也可以阻塞格式错误的属性(例如包含>或包含''图像源的属性)。
  • 使用像这样的正则表达式解析HTML是非常重要的,并且充其量只是在大多数情况下都能运行的快速黑客。

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

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

正则表达式是解析HTML的片段。 你最终会得到一个复杂的表达式,在某些角落的情况下出现意外行为。

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

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

并且有许多Java HTML解析器 。

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

复制cletus显示错误并修改他的答案并传递修改过的String src\\s*=\\s*([\"'])?([^\"']*)作为参数传递给Pattern.compile为我工作,

这是完整的例子

  String htmlString = "
"; //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 }

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

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

这应该工作。 表达式src ='...'在parantheses中,因此它是一个matcher-group,可以单独处理。