<div style="display:none">250</div>.<div style="display:none">145</div>
想要的号码:
<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解析器,因为我找不到不会威胁样式/类的纯文本解析器,并且我需要附加的值来确定该元素是否可见:(
是的,这让我发疯,但我几乎完成了:)
你真的不应该尝试用正则表达式解析 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());
http://codepad.viper-7.com/Ii4vPb
在您的情况下,
preg_replace("~</div's*>('.|'d{1,3})<div~i", '</div>#$1#<div', $string);
这是假设div和内容之间没有空格,并且之间没有任何其他奇怪的东西。
请注意,正则表达式非常脆弱,即使在 HTML 中最轻微的更改时也会静默失败。