我希望字符串的第一个单词被标签包围。在我的代码中,所有的单词都被它包围了。
代码用于wordpress,所以the_title是帖子的标题。例如。你好,世界。
我希望它是<span>Hello </span>World
。
<?php
$string = the_title('', '', false);
$pattern = '^(\S+?)(?:\s|$)^';
$replacement = '<span>$1</span>';
$string = preg_replace($pattern, $replacement, $string);
?>
<h2><a href="<?php the_permalink(); ?>"><?=$string?></a></h2>
抱歉我的英文不好:)
我的解决方案:
<?php
$string = the_title('', '', false);
$pattern = '/\S+/';
$replacement = '<span>$0</span>';
$string = preg_replace($pattern, $replacement, $string, 1);
?>
<h2><a href="<?php the_permalink(); ?>"><?=$string?></a></h2>
答案 0 :(得分:1)
尝试将1
作为第4个参数传递给1
,将替换次数限制为preg_replace
:
$string = preg_replace($pattern, $replacement, $string,1);
^^
找到单词的更好的正则表达式将使用单词边界:
$pattern = '/\b(\w+)\b/';
但这样您就必须再次将替换限制为1
。
或者,您可以将第一个单词匹配为:
$pattern = '/^\W*\b(\w+)\b/';
并且只使用preg_replace
而不限制替换次数。
注意:\w
= [a-zA-Z0-9_]
如果您的单词允许包含其他字符,请进行适当更改。如果您将任何非空格视为单词字符,则可以使用\S
。
答案 1 :(得分:1)
使用以下内容:
$string = "Hello World";
$val = explode(" ", $string);
$replacement = '<span>'.$val[0].' </span>';
for ($i=1; $i < count($val); $i++) {
$replacement .= $val[$i];
}
echo "$replacement";
答案 2 :(得分:0)
你必须像这样更新模式和替换(这会忽略开头的第一个空格):
<?php
$string = the_title('', '', false);
$pattern = "^(\\s*)(\\S+)(\\s*)(.*?)$";
$replacement = '<span>$2</span>';
$string = preg_replace($pattern, $replacement, $string);
答案 3 :(得分:0)
在这种情况下不需要PCRE。您可以使用简单的substr
/ strpos
组合执行相同的操作(尽管最低限度应该更快):
$str = 'Hello World';
$endPos = strpos($str, ' ')+1;
$str = '<span>'.substr($str, 0, $endPos).'</span>'.
substr($str, $endPos);
echo $str;
如果你真的想采用PCRE方式,你可以这样做:
$str = preg_replace('/^([^\s]+\s)/', '<span>\1</span>', $str);
该语句不需要$limit
,因为模式以^
(字符串的开头)开头,与你的不同,它不是分隔符。
答案 4 :(得分:0)
$string = '"' . substr($string, 0, strpos($string, ' ')) . '"';
应该做的伎俩!