这就是我的
$str = 'Just a <span class="green">little</span> -text åäö width 123#';
这就是我需要的
跨度和空格的结果,也可能是换行符。
$result = '<span></span><span></span><span></span><span></span> <span></span> <span class="green"><span></span><span></span><span></span><span></span><span></span><span></span></span> <span></span><span></span><span></span><span></span><span></span> <span></span><span></span><span></span> <span></span><span></span><span></span><span></span><span></span> <span></span><span></span><span></span>';
您可能想知道我可能需要它做什么。我想构建一个用 block 表示角色的东西。看起来有点像 Windows XP 上的碎片整理。
问题
- 将每个字符替换为
<span></span>
. - 不要触及字符串中已经存在的 HTML 范围(可能很难?)。可以有多个 HTML 元素。
- 不要触摸空格和换行符。
- Regexp应该怎么做?还是 Xpath?
到目前为止我做了什么?
我找到了关于正则表达式但没有替换每个字符(摘录空格和换行符)的文章
$result = preg_replace("/???/", "<span></span>", $str);
print_r($result);
最佳答案
您可以使用 preg_replace_callback()
$str = 'Just a <span class="green">little</span> -text åäö width 123#';
function replacement($matches) {
if (strlen($matches[0]) == 1)
{
return "<span></span>";
}
else
{
return $matches[0];
}
}
$result = preg_replace_callback("~<span.*?<\s*/\s*span>|\S~", "replacement", $str);
print_r($result);
这只是根据匹配计算替换字符串。如果匹配长度为 1(已找到非空白字符),则替换为“span”标签,否则已找到 span 标签,重新插入。
关于php - 用元素替换每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297324/