9

我想从 PHP 中字符串的第一个逗号中删除所有内容(包括逗号)。

例如,

$print = "50 days,7 hours";

应该成为

50 days
4

6 回答 6

34

这是一种方法:

$print = preg_replace('/^([^,]*).*$/', '$1', $print);

其他:

list($print) = explode(',', $print);

或者:

$print = explode(',', $print)[0];
于 2009-07-15T13:30:23.150 回答
12

这应该适合你:

$r = (strstr($print, ',') ? substr($print, 0, strpos($print, ',')) : $print);
# $r contains everything before the comma, and the entire string if no comma is present
于 2009-07-15T13:29:36.630 回答
6

您可以使用正则表达式,但如果它总是与逗号配对,我会这样做:


$printArray = explode(",", $print);
$print = $printArray[0];
于 2009-07-15T13:30:38.143 回答
5

您还可以使用当前功能:

$firstpart = current(explode(',', $print)); // will return current item in array, by default first

该系列的其他功能还有:

$nextpart = next(explode(',', $print)); // will return next item in array

$lastpart = end(explode(',', $print)); // will return last item in array
于 2013-04-29T12:52:48.690 回答
3
$string="50 days,7 hours";  
$s = preg_split("/,/",$string);
print $s[0];
于 2009-07-15T13:32:10.577 回答
1

如果您要使用,strstr()那么您需要 100% 确定字符串中将存在逗号,或者准备好处理false返回值。将其第三个参数设置为true访问第一个逗号之前的所有字符。如果没有逗号,则返回值为false.

preg_replace()可能效率最低,但它是单个函数调用,如果找不到逗号,我将使用的模式不会改变字符串。如果您的输入字符串中可能包含换行符,请使用s模式修饰符以允许点 ( .) 也匹配这些字符。

strtok()是一个简洁的工具,但我发现它的名称比其他函数更不具表现力/更神秘(也许这是我个人对strstr(). 的偏见。这可能会使您的代码的未来读者感到困惑或减慢速度。false如果输入字符串没有长度。

如果你要使用explode(),那么不要要求 php 执行超过 1 次爆炸。这个函数的好处是如果逗号不存在,那么它将返回整个字符串。我不喜欢使用explode(),因为它会生成一个数组,从中可以访问第一个元素——我不喜欢生成比我需要的更多的数据。

sscanf()对于这个任务来说有点太笨拙了,因为需要使用否定字符类以及空合并运算符。如果分隔符是空格,则%s可以使用,但仍需要空值合并运算符,因为sscanf()不会进行零长度匹配。

代码:(演示)(演示,如果没有逗号)(演示,如果字符串为空

“50天7小时” “50天” “”
strstr($print, ',', true) “50天7小时” 错误的 错误的
preg_replace('/,.*/', '', $print) “50天7小时” “50天” “”
strtok($print, ",") “50天7小时” “50天” 错误的
explode(',', $print, 2)[0] “50天7小时” “50天” “”
sscanf($print, '%[^,]')[0] ?? $print “50天7小时” “50天” “”
于 2021-06-24T22:28:13.160 回答