例子:
<div>foo</div>
<p>bar</p>
Unwrapped text
我想要的是:
<div>foo</div>
<p>bar</p>
<span>Unwrapped text</span>
如何在不依赖新线路的情况下实现这一目标?
我不会对 html 使用正则表达式。
你可以用phpQuery做到这一点
$doc = phpQuery::newDocument($html);
$doc->contents()->not($doc->children())->wrap("<span>");
$html = $doc->html();
不过没试过。
从您的字符串中提取标记,例如:<div>
, foo
, </div>
, <p>
, bar
, </p>
, Unwrapped text
. 您可以使用正则表达式来做到这一点。然后
for each token do
if token is opening tag
push token on stack
else if token is closing tag (and matching opening tag is ontop of stack)
pop token from stack
else if token is text and stack is not empty
ignore token (continue)
else if token is text and stack is empty
wrap token with <span>
这将适用于任意嵌套的XML
字符串。