php - 用元素替换每个字符

标签 php regex string replace preg-replace

这就是我的

$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/

相关文章:

c# - 从集合中删除空字符串的便捷方法

php - 使用 Codeigniter,如何向其他开发人员 stash Paypal 凭据?

javascript - JSTree - 禁用加载时自动选择子项

jQuery 美国货币验证正则表达式也允许整数

regex - 突出显示 Rust 语法中匹配的尖括号

c# - 将标签存储到ElasticSearch中

php - 我应该通过 varchar 或成员 ID 保存通知相关的成员名称吗?

php - 如何在 PHP 中使用 shell_script 创建数据库后创建表?

javascript - 使用以@pin.edu.sh 结尾的正则表达式验证电子邮件

javascript - 乌克兰字母的正则表达式。如何用大写字母分隔西里尔字母?