我有一个与html混合的文本字符串,需要分隔单词仅并将它们包装在span中。
字符串:$string ='<div class="something">What </div> if it it is is same <div style="color:red;">same </div>';
期望输出
<div class="something">
<span class="splits split1">
What
</span>
</div>
<span class="splits split2">
if
</span>
<span class="splits split3">
it
</span>
<span class="splits split4">
it
</span>
<span class="splits split5">
is
</span>
<span class="splits split6">
is
</span>
<span class="splits split7">
same
</span>
<div style="color:red;">
<span class="splits split8">
same
</span>
</div>
我尝试了所有我能想到的,preg_replace与字边界,preg_match, str_replace,组合与爆炸,循环和替换,但这样或那样的输出失败,刹车的html或它添加替换,它不应该是。
任何帮助都是感激的。
正如@MarcB所说,这里的DOM生活更美味,但由于问题被标记为regex,这可能是一个变通方法(虽然不能保证%100):
</?'b[^<>]+>(*SKIP)(*F)|'w+
PHP: preg_replace_callback('~</?'b[^<>]+>(*SKIP)(*F)|'w+~', function($matches) {
static $counter = 0;
return "<span class='"splits split".(++$counter)."'">{$matches[0]}</span>";
}, $string);
现场演示