使用PHP中的REGEX匹配HTML内容中的数字(不在标记属性中)

时间:2010-09-03 08:12:54

标签: php regex

我有问题!我想检测HTML内容中没有标记属性中的数字的任何数字,我想将这些数字更改为其他字符,然后只将数字更改为与此REGEX匹配的HTML TAG属性。

示例:

Hi 3456; <a href="?id=4456">your code: 345</a> 

匹配     3456,345 不匹配     4456

感谢所有

2 个答案:

答案 0 :(得分:1)

您最好使用PHP Simple HTML DOM Parser之类的解析器。原因在this blog post中列出。

答案 1 :(得分:0)

这是一种快速的脏方法,适用于简单的样本和有效的html,可能会导致无效的html问题:

<?php
$html='Hi 3456; <a href="?id=4456">your code: 345</a> another 234';

$html = preg_replace('|(>[^<\d]*)(\d+)([^<\d]*</)|', '$1{NUM_WAS_HERE}$3', $html);//match between tags
$html = preg_replace('|^([^<\d]*)(\d+)([^<\d]*<)|', '$1{NUM_WAS_HERE}$3', $html);//beginning of the string
$html = preg_replace('|(>[^<\d]*)(\d+)([^<\d]*)$|', '$1{NUM_WAS_HERE}$3', $html);//end of the string

echo $html, "\n";//outputs: Hi {NUM_WAS_HERE}; <a href="?id=4456">your code: {NUM_WAS_HERE}</a> another {NUM_WAS_HERE}

正如@Reinis所建议的那样,使用html解析器是实现这一目标的良好安全方式。