<div style="display:none">250</div>.<div style="display:none">145</div>
id想:
<div style="display:none">250</div>#.#<div style="display:none">145</div>
或者像这样:
<div style="display:none">111</div>125<div style="display:none">110</div>
id想要
<div style="display:none">111</div>#125#<div style="display:none">110</div>
id就像一个preg替换,将这些标签放在麻木周围,所以我认为REGEX看起来像这样:
"<\/div>[.]|<\/div>\d{1,3}"
数字(如果是数字,可以是1-3位数字),或者它可以是一个点。
无论如何,我不知道如何更新以取代价值:
"<\/div>[.]|<\/div>\d{1,3}" replace: $0#
在值之后插入..
修改
我无法使用HTML解析器,因为我找不到威胁样式/类作为纯文本,并且我需要附加值,以确定元素是否可见:(
是的,它让我疯了,但我差点儿完成了:)
答案 0 :(得分:3)
你真的不应该尝试使用正则表达式解析HTML。我知道只有几个人可以做到这一点。即使你本来就是其中之一,正则表达式仍然不适合这项工作。使用PHP的DOMDocument可选DOMXPath。
使用xpath:
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$textNode = $xpath->query('//text()')->item(1);
$textNode->parentNode->replaceChild($dom->createTextNode('#' . $textNode->textContent . '#'), $textNode);
echo htmlspecialchars($dom->saveHTML());
http://codepad.viper-7.com/KLTLDA
使用子节点:
$dom = new DOMDocument();
$dom->loadHTML($html);
$body = $dom->getElementsByTagName('body')->item(0);
$textNode = $body->childNodes->item(1);
$textNode->parentNode->replaceChild($dom->createTextNode('#' . $textNode->textContent . '#'), $textNode);
echo htmlspecialchars($dom->saveHTML());
答案 1 :(得分:1)
在你的情况下,
preg_replace("~</div\s*>(\.|\d{1,3})<div~i", '</div>#$1#<div', $string);
假设div和内容之间没有空格,而且之间没有其他任何奇怪的东西。
请注意,正则表达式非常脆弱,即使是最轻微的HTML更改也会无声地失败。