2

例子:

<div>foo</div>
<p>bar</p>
Unwrapped text

我想要的是:

<div>foo</div>
<p>bar</p>
<span>Unwrapped text</span>

如何在依赖新线路的情况下实现这一目标?

4

2 回答 2

2

我不会对 html 使用正则表达式。

你可以用phpQuery做到这一点

$doc = phpQuery::newDocument($html);
$doc->contents()->not($doc->children())->wrap("<span>");
$html = $doc->html();

不过没试过。

于 2012-04-10T03:55:41.600 回答
1

从您的字符串中提取标记,例如:<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字符串。

于 2012-04-10T03:45:23.650 回答