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

如何删除php中第二个逗号后的文本,php,laravel,Php,Laravel,如果一个句子中没有两个逗号,如何删除句子中第二个逗号后的文本 我尝试了以下方法: substr($str, 0, strpos($str, ',', strpos($str, ',')+1)) 但这里的问题是,如果我在这个$str中没有两个逗号,函数将不输出任何内容,我将得到一个空白区域 是否需要检查是否存在两个逗号,并删除第二个逗号后的文本,或者不执行其他操作 试试这个: $commasCount = count(explode(',', $str)); if ($commasCount &

如果一个句子中没有两个逗号,如何删除句子中第二个逗号后的文本

我尝试了以下方法:

substr($str, 0, strpos($str, ',', strpos($str, ',')+1))
但这里的问题是,如果我在这个
$str
中没有两个逗号,函数将不输出任何内容,我将得到一个空白区域

是否需要检查是否存在两个逗号,并删除第二个逗号后的文本,或者不执行其他操作

试试这个:

$commasCount = count(explode(',', $str));
if ($commasCount > 2) {
    $str = substr($str, 0, strpos($str, ',', strpos($str, ',')+1));
}
只需首先检查出现次数:

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,但根据说明进行了修改)


您会注意到,结尾带有逗号的初始字符由
(…)?
末尾的问号设置为可选,因此不管怎样,它都会得到正确的值。

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


没问题,很乐意帮助。
preg_replace('/^([^,]*,[^,]*),.*$/','$1',$str);
Sorry-什么不起作用了?你的代码会给出“test”这正是它应该做的-您是否对其进行了修改以使其以我看不到的方式工作?OP希望所有文本都达到第二个逗号,而不是将文本删除到第二个逗号。它应该返回
这是,a,
$str = preg_replace('/((?:[^,]*,){2})?(?:.*)$/', '$1', $str);
$text_segments = explode(',', $str);

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