轻松PHP替换

时间:2010-12-28 03:59:21

标签: php preg-replace

我希望字符串的第一个单词被标签包围。在我的代码中,所有的单词都被它包围了。

代码用于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> 

5 个答案:

答案 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, ' ')) . '"';应该做的伎俩!