一尘不染

用于提取标签属性的正则表达式

html

我正在尝试提取锚标记(<a>)的属性。到目前为止,我有这个表达:

(?<name>\b\w+\b)\s*=\s*("(?<value>[^"]*)"|'(?<value>[^']*)'|(?<value>[^"'<> \s]+)\s*)+

适用于像

<a href="test.html" class="xyz">

和(单引号)

<a href='test.html' class="xyz">

但不适用于不带引号的字符串:

<a href=test.html class=xyz>

如何修改我的正则表达式,使其与不带引号的属性一起使用?还是有更好的方法来做到这一点?

更新: 谢谢您到目前为止的所有好评和建议。
我没有提到一件事:很遗憾,我必须修补/修改不是由我编写的代码。而且没有时间/金钱从头开始重写这些东西。


阅读 251

收藏
2020-05-10

共1个答案

一尘不染

如果你有一个像

<name attribute=value attribute="value" attribute='value'>

此正则表达式可用于依次查找每个属性名称和值

(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?

应用于:

<a href=test.html class=xyz>
<a href="test.html" class="xyz">
<a href='test.html' class="xyz">

它会产生:

'href' => 'test.html'
'class' => 'xyz'

注意: 这不适用于数字属性值,例如<div id="1">将不起作用。

2020-05-10