【问题标题】:PHP preg_split, split by same charactersPHP preg_split,由相同的字符分割
【发布时间】:2014-11-29 07:40:06
【问题描述】:

我正在尝试使用 preg_split 拆分字符串。这是字符串的示例: 111235622411 我希望输出是这样的:

$arr[0] = "111";
$arr[1] = "2";
$arr[2] = "3";
$arr[3] = "5";
$arr[4] = "6";
$arr[5] = "22";
$arr[6] = "4";
$arr[7] = "11";

所以如果一个接一个地有相同的字符,我希望它们在同一个“块”中。我只是想不出我应该使用的正则表达式。如果某些术语有误,我很抱歉,因为我已经有一段时间没有编写 PHP 代码了。

【问题讨论】:

    标签: php regex preg-split


    【解决方案1】:

    我会使用preg_match_all():

    $string = '111235622411';
    
    preg_match_all('/(.)\1*/', $string, $matches);
    var_dump($matches[0]);
    

    \1 引用先前捕获的组(.)(任何单个字符)。此功能称为back referencing。正则表达式重复先前匹配的字符 - greedy *,这意味着它匹配尽可能多的相等字符,这是问题中想要的。

    输出:

    array(8) {
      [0]=>
      string(3) "111"
      [1]=>
      string(1) "2"
      [2]=>
      string(1) "3"
      [3]=>
      string(1) "5"
      [4]=>
      string(1) "6"
      [5]=>
      string(2) "22"
      [6]=>
      string(1) "4"
      [7]=>
      string(2) "11"
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用这个正则表达式:

      (.)(?=\1)\1+|\d
      

      不要拆分它,而是拿火柴。

      $matches = null;
      $returnValue = preg_match_all('/(.)(?=\\1)\\1+|\\d/', '111235622411', $matches);
      

      $matches[0] 将包含您想要的内容。正如@hek2mgl 所建议的,您也可以使用更简单的/(\d)\1*/

      DEMO

      【讨论】:

        【解决方案3】:

        以下是一个简单的解决方案,包括执行 preg_match_all:

        这种情况下的正则表达式是:

        (\d)\1*
        

        正则表达式的含义:

        • (\d):第一个捕获组。 \d 匹配一个数字 [0-9]。
        • \1 匹配第一个捕获组最近匹配的相同文本。
        • *:量词介于零和无限次之间。

        php 代码是:

        $re = "/(\\d)\\1*/"; 
        $str = "111235622411"; 
        
        preg_match_all($re, $str, $matches);
        print_r($matches[0]);
        

        您可以访问例如第一个匹配组“111”,如下所示:$matches[0][0],第二个匹配组“2”,如 $matches[0][1],依此类推.在这里查看Demo 以查看工作示例。


        希望有用!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多