我想删除PHP中字符串第一个逗号的所有内容(包括逗号)。比如说
$print = "50 days,7 hours";
应该成为
50 days
xurqigkl1#
这里有一个方法:
$print = preg_replace('/^([^,]*).*$/', '$1', $print);
另一个:
list($print) = explode(',', $print);
或者:
$print = explode(',', $print)[0];
euoag5mw2#
这应该对你有用:
$r = (strstr($print, ',') ? substr($print, 0, strpos($print, ',')) : $print); # $r contains everything before the comma, and the entire string if no comma is present
yhived7q3#
你可以使用一个正则表达式,但如果它总是一对逗号,我只会这样做:
$printArray = explode(",", $print); $print = $printArray[0];
ykejflvf4#
你也可以使用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
kq4fsx7k5#
$string="50 days,7 hours"; $s = preg_split("/,/",$string); print $s[0];
3b6akqbq6#
如果要使用strstr(),则需要100%确定字符串中存在逗号,或者准备好处理false返回值。将其第三个参数设置为true,以访问第一个出现的逗号之前的所有字符。如果没有逗号,则返回值为false。preg_replace()可能是效率最低的,但它是单个函数调用,如果找不到逗号,我将使用的模式不会改变字符串。如果输入字符串中可能包含换行符,请使用s模式修饰符允许点(.)也匹配这些字符。strtok()是一个简洁的工具,但我发现它的名字比其他函数表达得更少/更神秘(也许这是我个人对strstr()的偏见。这可能会使您的代码的未来读者感到困惑或速度变慢。如果输入字符串没有长度,则此函数将返回false。如果你打算使用explode(),那么不要要求php执行超过1次的爆炸。这个函数的好处是,如果逗号不存在,那么它将返回整个字符串。我不喜欢使用explode(),因为它会生成一个数组,从该数组中访问第一个元素--我不喜欢生成超出需要的数据。sscanf()对于这个任务来说有点太笨拙了,因为需要使用一个取反的字符类以及null合并运算符。如果分隔符是空格,则可以使用%s,但仍然需要空合并运算符,因为sscanf()不会进行零长度匹配。产品编号:(Demo)(Demo if no comma)(Demo if string empty)| | 50天7小时|“50天”|”“你说什么?”|| - -----|- -----|- -----|- -----|| strstr($print, ',', true)|“50天”|假的|假的|| preg_replace('/,.*/', '', $print)|“50天”|“50天”|”“你说什么?”|| strtok($print, ",")|“50天”|“50天”|假的|| explode(',', $print, 2)[0]|“50天”|“50天”|”“你说什么?”|| sscanf($print, '%[^,]')[0] ?? $print|“50天”|“50天”|”“你说什么?”|
strstr()
false
true
preg_replace()
s
.
strtok()
explode()
sscanf()
%s
strstr($print, ',', true)
preg_replace('/,.*/', '', $print)
strtok($print, ",")
explode(',', $print, 2)[0]
sscanf($print, '%[^,]')[0] ?? $print
6条答案
按热度按时间xurqigkl1#
这里有一个方法:
另一个:
或者:
euoag5mw2#
这应该对你有用:
yhived7q3#
你可以使用一个正则表达式,但如果它总是一对逗号,我只会这样做:
ykejflvf4#
你也可以使用current函数:
此系列的其他功能:
kq4fsx7k5#
3b6akqbq6#
如果要使用
strstr()
,则需要100%确定字符串中存在逗号,或者准备好处理false
返回值。将其第三个参数设置为true
,以访问第一个出现的逗号之前的所有字符。如果没有逗号,则返回值为false
。preg_replace()
可能是效率最低的,但它是单个函数调用,如果找不到逗号,我将使用的模式不会改变字符串。如果输入字符串中可能包含换行符,请使用s
模式修饰符允许点(.
)也匹配这些字符。strtok()
是一个简洁的工具,但我发现它的名字比其他函数表达得更少/更神秘(也许这是我个人对strstr()
的偏见。这可能会使您的代码的未来读者感到困惑或速度变慢。如果输入字符串没有长度,则此函数将返回false
。如果你打算使用
explode()
,那么不要要求php执行超过1次的爆炸。这个函数的好处是,如果逗号不存在,那么它将返回整个字符串。我不喜欢使用explode()
,因为它会生成一个数组,从该数组中访问第一个元素--我不喜欢生成超出需要的数据。sscanf()
对于这个任务来说有点太笨拙了,因为需要使用一个取反的字符类以及null合并运算符。如果分隔符是空格,则可以使用%s
,但仍然需要空合并运算符,因为sscanf()
不会进行零长度匹配。产品编号:(Demo)(Demo if no comma)(Demo if string empty)
| | 50天7小时|“50天”|”“你说什么?”|
| - -----|- -----|- -----|- -----|
|
strstr($print, ',', true)
|“50天”|假的|假的||
preg_replace('/,.*/', '', $print)
|“50天”|“50天”|”“你说什么?”||
strtok($print, ",")
|“50天”|“50天”|假的||
explode(',', $print, 2)[0]
|“50天”|“50天”|”“你说什么?”||
sscanf($print, '%[^,]')[0] ?? $print
|“50天”|“50天”|”“你说什么?”|