【发布时间】:2010-11-11 00:15:33
【问题描述】:
我想从 PHP 中字符串的第一个逗号中删除所有内容(包括逗号)。
例如,
$print = "50 days,7 hours";
应该变成
50 days
【问题讨论】:
标签: php replace substring extract
我想从 PHP 中字符串的第一个逗号中删除所有内容(包括逗号)。
例如,
$print = "50 days,7 hours";
应该变成
50 days
【问题讨论】:
标签: php replace substring extract
这是一种方法:
$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
【讨论】:
strstr() 来寻找字符串中是否存在子字符串。 php.net/manual/en/….
您可以使用正则表达式,但如果它总是与逗号配对,我会这样做:
$printArray = explode(",", $print);
$print = $printArray[0];
【讨论】:
你也可以使用current函数:
$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];
【讨论】:
explode() 的设计目的)并且它在最终需要字符串时生成一个数组.调用中甚至没有限制参数,因此它可能会在返回的数组中生成许多元素。我知道这是一个古老的问题,但我看不到这种技术的任何可取之处。它有效,但我永远不会推荐它。
如果您要使用strstr(),那么您需要100% 确定字符串中存在逗号,或者准备好处理false 返回值。将其第三个参数设置为true 以访问第一个逗号之前的所有字符。如果没有逗号,则返回值为false。
preg_replace() 可能效率最低,但它是单个函数调用,如果找不到逗号,我将使用的模式不会改变字符串。如果您的输入字符串中可能包含换行符,请使用 s 模式修饰符以允许点 (.) 也匹配这些字符。
strtok() 是一个简洁易用的工具,但我发现它的名称比其他功能更不具表现力/更神秘(也许这是我个人对strstr() 的偏见。这可能会使未来的读者感到困惑或减慢您的代码。如果输入字符串没有长度,此函数将返回 false。
如果你要使用explode(),那么不要要求php执行超过1次爆炸。这个函数的好处是如果逗号不存在,那么它将返回整个字符串。我不喜欢使用explode(),因为它会生成一个数组,从中可以访问第一个元素——我不喜欢生成比我需要的更多的数据。
sscanf() 对于这个任务来说有点笨拙,因为需要使用否定字符类以及空合并运算符。如果分隔符是空格,则可以使用 %s,但仍需要空值合并运算符,因为 sscanf() 不会进行零长度匹配。
代码:(Demo) (Demo if no comma) (Demo if string empty)
| "50 days,7 hours" | "50 days" | "" | |
|---|---|---|---|
strstr($print, ',', true) |
"50 days,7 hours" | false | false |
preg_replace('/,.*/', '', $print) |
"50 days,7 hours" | "50 days" | "" |
strtok($print, ",") |
"50 days,7 hours" | "50 days" | false |
explode(',', $print, 2)[0] |
"50 days,7 hours" | "50 days" | "" |
sscanf($print, '%[^,]')[0] ?? $print |
"50 days,7 hours" | "50 days" | "" |
【讨论】: