正则表达式从HTML标记获取属性
我正在寻找一个正则表达式,可以从java中的以下HTML片段中获取src(不区分大小写)标记。
一种可能性:
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,可以单独处理。