PHP - 使用str_word_count而不是preg_replace拆分字符串

时间:2015-06-15 22:14:30

标签: php html regex preg-replace

我正在尝试将长字符串分成两个单独的部分,具体取决于不同的字数(一些字符串我希望分成2个字,也许是其他字符串4等),这样我就可以将第二个分割包裹起来标签。

例如:

<?php $string = 'A long title is not great for the world to read";<?php>
<h1><?php echo $string;?></h1>

但是,更喜欢输出:

<h1>A long title <span>is not great for the world to read</span></h1>

我几乎成功地使用了这种方法,但是当字符串中有引号或撇号时,我遇到了正则表达式抛出拟合的问题,并认为可能更容易使用str_word_count,因为它也减少了服务器:

function get_snippet($str, $wordCount) {
    $arr = preg_split(
        '/(?<=\w)\b/', 
        $str, 
        $wordCount*2+1, 
        PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
    );

    $first = implode('', array_slice($arr, 0, $wordCount));
    $last = implode('', array_slice($arr, $wordCount));

    return $first.'<span>'.$last.'</span>';
}

<h1>
    <?php $string = get_the_title(); echo get_snippet($string, 3);?>
</h1>

此代码已从此处修改: How to select first 10 words of a sentence?

3 个答案:

答案 0 :(得分:1)

你可以在像这样的一些角色之后去第一个空间...

<?php
$string = "A long title is not great for the world to read.";
$splitPosition = strpos($string, " ", 10);
print "<h1>" . substr($string, 0, $splitPosition) . "<span>" . substr($string, $splitPosition) . "</span></h1>";
?>

答案 1 :(得分:0)

您可以使用substr获取第一部分,然后使用ltrim从主字符串中修剪它。 或者您可以对字符串的第一部分和最后部分使用substr两次。

答案 2 :(得分:0)

这是我的两分钱。 php手册中的mb_substr函数。

    $string = "A long title is not great for the world to read";
    echo "<h1>".mb_substr($string,0,13);."<span>".mb_substr($string,13,strlen($string))."</span></h1>";