在第一个单词后面的所有文本周围包装html标签

时间:2017-08-16 13:12:18

标签: php html regex preg-match

如何重写此代码,以便在第一个单词后面的最后几个单词周围包含html标记;

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<span class="color_red">$0</span>', $atts['title']);

目前,这个正则表达式会将标签包裹在字符串中的第一个单词周围。我试过了,但它不起作用;

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<span class="color_red">$1</span>', $atts['title']);

以下是一些例子;

Efficiency <span class="color_red">solutions</span>
Renewable <span class="color_red">Energy Solutions</span>
Accidentally <span class="color_red">left the caps lock on and typed something</span>

或者请提供另一种有效的解决方案。

2 个答案:

答案 0 :(得分:0)

匹配第一个单词后的所有内容,直到最后一个非空格

preg_replace('/\b[\w\'-]+\W+\K.*\S/s', '<span class="color_red">$0</span>', $atts['title']);
  • \b匹配第一个字的
  • 的初始word boundary
  • [\w'-]+ word characters
  • 中的一个或多个character class,单引号和连字符
  • \W+一个或多个非单词字符
  • \K resets报告的比赛开始
  • .*\S任何内容,直到最后一个非空格字符
  • s - flag用于使点匹配换行符
  • 如果输入为utf-8,请为unicode regex添加u标记以调整\b\w\W

See this demo at regex101

答案 1 :(得分:0)

您也可以这样做..

$data = "Write your description here";
list($first,$last) = explode(" ", $data,2);
echo $newstring = $first." <span>".$last."</span>";