【问题标题】:PHP preg_split get rid of trailing spaces in just one line?PHP preg_split 在一行中去掉尾随空格?
【发布时间】:2012-04-11 18:56:51
【问题描述】:

我怎样才能摆脱preg_split结果中的尾随空格没有使用preg_replace首先从$test字符串中删除所有空格?

$test   = 'One , Two,   Thee   ';
$test   = preg_replace('/\s+/', ' ', $test);
$pieces = preg_split("/[,]/", $test);

【问题讨论】:

  • 您可以改用trim。算不算?
  • @zerkms 无法理解您的评论。 trim 返回从开头和结尾去掉空格的字符串,而不是在字符串内部。
  • 你什么也没说“在字符串内部”,你说“我怎样才能摆脱尾随空格”
  • @zerkms 是的,你说得对,对不起。看看$test就更清楚了。

标签: php regex preg-replace preg-split


【解决方案1】:

如果必须是 preg_split()(您实际上在问题中要求这样做),那么这可能会有所帮助:

$test   = 'One , Two,   Thee   ';
$pieces = preg_split("/\s*,\s*/", trim($test), -1, PREG_SPLIT_NO_EMPTY);

trim() 用于删除第一个元素之前和最后一个元素之后的空格。 (preg_split() 不这样做 - 它只删除逗号周围的空格)

【讨论】:

  • +1 表示PREG_SPLIT_NO_EMPTY。我会进一步调查-1 参数,谢谢。
  • @Polmonino 第三个参数是限制,-1其实就是“获取所有元素,没有限制”。这是默认值,但是当您想使用第四个参数时,您必须明确指定它。
【解决方案2】:

我会这样做:

$test = 'One , Two,   Thee   ';
$pieces = array_map('trim', explode(',', $test));
print_r($pieces);

【讨论】:

  • 会爆炸处理像`,`这样的sep的情况(前后有任意数量的空格)?我不这么认为..
  • @Polmonino 不,它不会,这就是 Frosty 使用 array_map('trim', ..) 的原因。 trim() 实际上删除了每个元素中文本前后的空格。
【解决方案3】:

所以,是的,@Kaii 那里很棒,同时,根据他的解决方案中的提示,我修改了我的代码:

function splitStringToArray($str){
    return preg_split('/\s+/', $str);
}

收件人:

function splitStringToArray($str){
    return preg_split('/\s+/', trim($str));
}

现在我得到了我想要的确切结果,文字处理功能中没有尾随空格。希望这也对某人有所帮助。干杯。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2011-08-28
    • 2019-12-16
    • 2011-05-28
    • 2019-04-30
    • 2021-10-22
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多