如何从字符串中删除第一个特定字符之前的所有内容?

10

我的变量看起来像这样:

AAAAAAA, BB CCCCCCCC

AAAA,BBBBBB CCCCCC

我想删除","之前的所有内容,

所以结果应该是:

BB CCCCCCCC

BBBBBB CCCCCC

我已经想出了一种方法,可以删除","之后的所有内容:

list($xxx) = explode(',', $yyyyy);

不幸的是,我不知道如何让它在","之前删除所有内容。


您可能会发现s($str)->afterFirst(',')很有用,该方法是在这个独立的库中找到的。 - caw
$xxx = explode(',', $yyyyy, 2)[1]; - kenorb
6个回答

27

由于这是一种简单的字符串操作,您可以使用以下方法删除第一个逗号之前的所有字符:

$string = preg_replace('/^[^,]*,\s*/', '', $input);

preg_replace() 函数可以基于正则表达式替换字符串的一部分。让我们来看看这个正则表达式。

  • / 是起始定界符
    • ^ 是“字符串开头”的锚点
    • [^,] 表示任何不是逗号的字符(^ 在此处表示否定该类别)
      • * 表示重复零次或多次
    • , 表示普通逗号
    • \s 表示任何空格字符
      • * 表示重复零次或多次
  • / 是结束定界符

2
正则表达式是你的好朋友。 - Canuteson
如果我想删除逗号之前和包括逗号的每个字符怎么办? - mim
我一直在寻找相同的东西。最后用','替换了'',所以完整的代码会变成:$string = preg_replace('/^[^,]*,\s*/', ',', $input); - eQ19

20

我不建议使用explode,因为如果有多个逗号会导致更多的问题。

// removes everything before the first ,
$new_str = substr($str, ($pos = strpos($str, ',')) !== false ? $pos + 1 : 0);

编辑:

if(($pos = strpos($str, ',')) !== false)
{
   $new_str = substr($str, $pos + 1);
}
else
{
   $new_str = get_last_word($str);
}

这是我认为你应该使用的。 - Pedro
+1 -- 在我看来,这种方法比正则表达式更快且更易读。建议采用这种方法。 - Martin Tournoij
是的,这个方法很好用!最后一个问题:如果字符串中没有逗号,是否可以包含一个“if”语句来使用另一个函数来获取字符串的最后一个单词? - Andrej
1
使用trim(),就像我的下面的例子一样。 - Lawrence Cherone
@Tim:我已经有一个函数可以输出给定字符串的最后一个单词。但是如果没有“,”,我无法告诉脚本使用该函数。如果可能的话,请帮忙解决一下。 - Andrej
显示剩余5条评论

2
list(,$xxx) = explode(',', $yyyyy, 2);

1
另外:$xxx = explode(',', $yyyyy, 2)[1]; - kenorb

2

尝试这个代码,它可以获取逗号后面的内容,如果没有逗号,会从最后一个空格处检查,我将其包装成一个函数以便易于使用:

<?php 
$value='AAAA BBBBBB CCCCCC';
function checkstr($value){
    if(strpos($value,',')==FALSE){
        return trim(substr(strrchr($value, ' '), 1 ));  
    }else{
        return trim(substr($value, strpos($value,',')),',');
    }
}

echo checkstr($value);
?>

这也可以正常工作!但如果字符串中没有“,”,我该如何告诉脚本使用字符串的最后一个单词? - Andrej

1

你可以做:

$arr = explode(',', $yyyyy);
unset($arr[0]);
echo implode($arr);

我认为这很好。不过你需要使用echo implode(',',$arr);来避免丢失其他逗号。 - embe
@embe 在问题的例子中没有其他逗号。 - Naftali
是的。在我的情况下是这样的,为了回答“从字符串中删除第一个“,”之前的所有内容”,我认为添加这个解决方案是很好的。感谢您提供了一个好的解决方案。 - embe

0

正则表达式通常比较耗费资源,我不建议在这种简单的情况下使用它。 使用explode函数并将其限制为2个参数可能会导致与使用str_pos函数相同的执行时间,但您无需执行其他操作即可生成所需的字符串,因为它存储在第二个索引中。

 //simple answer 
 $str = explode(',', $yyyyy,2)[1]; 

或者

//better 

$arr = explode(',', $yyyyy,2);
$str = isset($arr[1]) ? $arr[1] : '';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接