【问题标题】:preg_split with two delimiters in PHP在 PHP 中使用两个分隔符的 preg_split
【发布时间】:2012-12-19 00:40:02
【问题描述】:

如何合并preg_split中的两个分隔符?例如:

$str = "this is a test , and more";
$array = preg_split('/( |,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($array);

将产生一个数组

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] =>  
    [8] => 
    [9] => ,
    [10] => 
    [11] =>  
    [12] => and
    [13] =>  
    [14] => more
)

但我想得到

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] => ,
    [8] => and
    [9] =>  
    [10] => more
)

其实我想在两个定界符相邻的情况下合并数组元素。换句话说,如果下一部分是第二个分隔符,则忽略第一个分隔符。

【问题讨论】:

  • 您的最后一段是正则表达式无法完成的。为此,您需要自定义代码。

标签: php arrays split preg-split


【解决方案1】:

尝试使用字符类:/[ ,]+/

+ 是一个量词,意思是“1 个或多个”

【讨论】:

  • CAPTUREpreg_split 功能仅适用于括号内的分隔符。使用[ ],我们无法捕获分隔符。
  • 你能把括号放在括号里吗?
  • 我的错!是的,它可以简单地放在括号内,我只是看到括号作为替换。
  • 是否可以将此结构用于超过 1 个字符的分隔符?
【解决方案2】:

首先要确保这种情况不会发生:

<?php
    $str = "this is a test , and more";
    $str=preg_replace('/ *, */',',',$str);
    $array = preg_split('/( |,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
    print_r($array);
?>

Array
(
    [0] => this
    [1] =>  
    [2] => is
    [3] =>  
    [4] => a
    [5] =>  
    [6] => test
    [7] => ,
    [8] => and
    [9] =>  
    [10] => more
)

【讨论】:

    【解决方案3】:

    使用/([, ]+)/ 可以工作。见codepad

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2013-02-23
      相关资源
      最近更新 更多