php - 如何用 PHP 将每个单词包装在 span 中?

标签 php html regex preg-replace explode

我有一些 html 段落,我想将每个单词都包装在 .现在我有

$paragraph = "This is a paragraph.";
$contents = explode(' ', $paragraph);
$i = 0;
$span_content = '';
foreach ($contents as $c){
    $span_content .= '<span>'.$c.'</span> ';
    $i++;
}
$result = $span_content;

上面的代码在正常情况下工作得很好,但有时 $paragraph 会包含一些 html 标签,例如

$paragraph = "This is an image: <img src='/img.jpeg' /> This is a <a href='/abc.htm'/>Link</a>'";

我怎样才能不将“单词”包裹在 html 标签内,以便 html 标签仍然有效,但将其他单词包裹在 span 中?非常感谢!

最佳答案

一些(*SKIP)(*FAIL)机制?

<?php
$content = "This is an image: <img src='/img.jpeg' /> ";
$content .= "This is a <a href='/abc.htm'/>Link</a>";
$regex = '~<[^>]+>(*SKIP)(*FAIL)|\b\w+\b~';

$wrapped_content = preg_replace($regex, "<span>\\0</span>", $content);
echo $wrapped_content;

请参阅 上的演示 ideone.com 以及 regex101.com


要同时省略 Link,您可以:

(?:<[^>]+>     # same pattern as above
|              # or
(?<=>)\w+(?=<) # lookarounds with a word
)
(*SKIP)(*FAIL) # all of these alternatives shall fail
|
(\b\w+\b)

regex101.com 上查看演示.

关于php - 如何用 PHP 将每个单词包装在 span 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36999957/

相关文章:

regex - 如何匹配多种语言

PHP:数组声明中的变量

php - Behat 3 和 Laravel,测试环境不被尊重

javascript - Jquery - 无法从 AJAx 响应中删除()

Javascript 选项卡使用数据属性而不是 ID 来链接按钮和选项卡

java - 这个正则表达式在 Java 中是如何工作的?

php - 嵌套三元运算符的优先顺序

php - 寻求有关为 MySQL 查询转义数据的帮助

HTML 5 具有重复数字的有序列表

PHP 正则表达式 : zero or more whitespace not working