【发布时间】:2013-04-30 10:09:25
【问题描述】:
这就是我所拥有的
$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>';
您可能想知道我可能需要这个做什么。我想构建一个用块表示字符的东西。看起来有点像 Windows XP 上的 Defrag。
问题
- 将每个字符替换为
<span></span>。 - 不要触摸字符串中已经存在的 HTML 跨度(可能很难?)。可以有多个 HTML 元素。
- 请勿触摸空格和换行符。
- Regexp 应该这样做吗?还是 Xpath?
到目前为止我做了什么?
我找到了关于正则表达式的文章,但没有替换每个字符(摘录空格和换行符)
$result = preg_replace("/???/", "<span></span>", $str);
print_r($result);
【问题讨论】:
-
try
preg_replace("/([^:space:\n])/", "<span></span>", $str);[] 是一组字符,^ 不是,:space: 或 \s 是空格 \n 是换行符 -
“不要触摸字符串中已经存在的 HTML”部分是正则表达式解决方案导致问题的地方。您真的想使用 DOM 解析器,仅遍历文本节点并在这些节点上应用
/\S/-><span></span>替换。 Here is a good overview of your DOM-parsing options -
只有一个 HTML span 还是还有更多?
-
可能不止一个。我更新了我的问题信息。
标签: php regex string replace preg-replace