如何在php中的第二个逗号后删除文本

时间:2015-04-14 15:46:12

标签: php laravel

如何在second comma之后删除句子中的文本,但如果句子中没有two commas则不执行任何操作?

我尝试了以下内容:

substr($str, 0, strpos($str, ',', strpos($str, ',')+1))

但问题是,如果我在这个$str中没有两个逗号,则功能不会输出,我会得到一个空白区域。

无论如何检查是否存在两个逗号并在第二个逗号后删除文本,否则不执行任何操作。

3 个答案:

答案 0 :(得分:2)

试试这个:

$commasCount = count(explode(',', $str));
if ($commasCount > 2) {
    $str = substr($str, 0, strpos($str, ',', strpos($str, ',')+1));
}

答案 1 :(得分:0)

首先检查出现次数:

if (substr_count($str, ',') >= 2)
    substr($str, 0, strpos($str, ',', strpos($str, ',')+1));

或者你可以用preg_match()来做,但速度会慢一些:

if (preg_match('/([^,]*,){2}/', $str, $match))
    $str = $match[1];

或者只需一步(上面的ala adeneo,但根据说明进行了修改)

$str = preg_replace('/((?:[^,]*,){2})?(?:.*)$/', '$1', $str);

您会注意到(...)?末尾的问号标记末尾带有逗号的初始字符是可选的,因此无论如何都会得到正确的值。

答案 2 :(得分:0)

一种更优雅的方法,不使用字符串函数并重用数组,因为我们需要它来计算逗号的数量(并且为了可读性而避免使用正则表达式疯狂):

$text_segments = explode(',', $str);

if( count($text_segments) > 2 ) {
    $str = $text_segments[0] . ',' . $text_segments[1];
}