html - 正则表达式插入所有数字周围的标签
问题描述
我有一个包含许多这样的行的文档:
<tr><td width="10%">doc_no_320F0321</td><td width="5%">116</td><td> bla bla bla 1976, bla bla point (2) bla bla bla. </td><td> bla bla bla 1976, bla bla point (1) bla bla bla. </td></tr>
(美化后它看起来像这样:
<tr>
<td width="10%">doc_no_320F0321</td>
<td width="5%">116</td>
<td> bla bla bla 1976, bla bla point (2) bla bla bla. </td>
<td> bla bla bla 1976, bla bla point (1) bla bla bla. </td>
</tr>
)
我需要做的是检查第三个和第四个 < td > 的数字是否相同,忽略其他字符。
为此,我尝试用 <mark> 突出显示它们,以便更容易看到它们。我正在运行这个 sed 替换:
sed -i -r 's|(<td>.*?)([[:digit:]]+)(.*?<\/td>)|\1<mark>\2<\/mark>\3|g'
但它只围绕每一行的最后一位数字。
有人可以帮我把第三个和第四个标签中的所有数字组合都包围起来吗?
谢谢。
解决方案
如果您只想生成页面的 HTML 版本,并在特定列中突出显示数字,您可以执行以下操作:
$d = new DOMDocument();
$d->loadHTMLFile('your_file_path.html');
$x = new DOMXpath($d);
$third_td = $x->evaluate('//tr/td[3]');
$fourth_td = $x->evaluate('//tr/td[4]');
$pattern = '/\d/';
$replace = '<span style="color: red;">${0}</span>';
foreach ( $third_td as $key => $input ) {
$input->nodeValue = preg_replace($pattern, $replace, $input->nodeValue);
$fourth_td[$key]->nodeValue = preg_replace($pattern, $replace, $fourth_td[$key]->nodeValue);
}
echo $d->saveHTML();
结果$d->saveHTML()
是一个 HTML 版本,其中第 3 列和第 4 列中的所有数字都以红色着色。如果这是您需要的,可以相应地更改样式。
我没有考虑处理任何可能导致错误的缺失列或其他不兼容问题。
这段代码是用 PHP 编写的,基于 @Toto 的建议。
希望这可以帮助
推荐阅读
- python - 使用 method='ffill' 时重新索引错误
- mysql - Docker MySql 服务仅以管理员身份启动,从不使用 AWS AMI 2018.3
- pandas - 将“全部”行添加到熊猫组中
- sql-server - MSSQL CLRProcedures 和 CLR 安全错误 (SQL Server 2017)
- javascript - 从 React Native 和 expo 调用本地域
- python - 在字典列表中查找值并返回字典的 id
- powermock - 如何使用 EasyMock 和 PowerMock 模拟消费者参数
- angular - 在 angular8 中动态加载 HTML 模板有效,但将属性绑定到插值字符串不起作用
- ethereum - Web3:转账 ETH 出错
- reactjs - Reactjs自动滚动到容器底部