我想从 PHP 中字符串的第一个逗号中删除所有内容(包括逗号)。
例如,
$print = "50 days,7 hours";
应该成为
50 days
这是一种方法:
$print = preg_replace('/^([^,]*).*$/', '$1', $print);
其他:
list($print) = explode(',', $print);
或者:
$print = explode(',', $print)[0];
这应该适合你:
$r = (strstr($print, ',') ? substr($print, 0, strpos($print, ',')) : $print);
# $r contains everything before the comma, and the entire string if no comma is present
您可以使用正则表达式,但如果它总是与逗号配对,我会这样做:
$printArray = explode(",", $print);
$print = $printArray[0];
您还可以使用当前功能:
$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
$string="50 days,7 hours";
$s = preg_split("/,/",$string);
print $s[0];
如果您要使用,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天” | “” |