【问题标题】:Match hyphen character from a string to make an array output匹配字符串中的连字符以生成数组输出
【发布时间】:2019-03-05 03:42:17
【问题描述】:

我有一个应该包含姓名和注册日期的字符串:

Dipak Misra - 18 Nov 2018 10:20

我想把这个字符串转换成这样的数组:

Array ( [0] => Dipak Misra [1] => 18 Nov 2018 [2] => 10:20 ) 

我正在使用preg_match_all()函数:

$re = '/\w+(?:[-\s]\w+)*/'; 
$str = "Dipak Misra - 18 Nov 2018 10:20"; 
preg_match_all($re, $str, $matches);
print_r($matches[0]);

我得到这样的输出:

Array ( [0] => Dipak Misra [1] => 18 Nov 2018 10 [2] => 20 ) 

请指导我。

【问题讨论】:

    标签: php arrays regex string preg-match-all


    【解决方案1】:

    如果该字符串的格式没有改变,您可以在空格、连字符空格上进行拆分,或者在左侧和右侧出现数字而不是匹配的空格上进行拆分。

    - |(?<=\d) (?=\d)

    Regex demo

    例如:

    print_r(preg_split("/ - |(?<=\d) (?=\d)/", "Dipak Misra - 18 Nov 2018 10:20"));
    

    结果:

    Array
    (
        [0] => Dipak Misra
        [1] => 18 Nov 2018
        [2] => 10:20
    )
    

    【讨论】:

      【解决方案2】:

      改用preg_match()([^-]+)\s+-\s+(.*)\s(\d+:\d+) 作为模式

      $re = '/([^-]+)\s+-\s+(.*)\s(\d+:\d+)/'; 
      $str = "Dipak Misra - 18 Nov 2018 10:20"; 
      preg_match($re, $str, $matches);
      unset($matches[0]);
      print_r($matches);
      

      Check result in demo

      【讨论】:

        【解决方案3】:
        $pattern = "/(\w+\s\w+)\s-\s([0-9]{2}\s\w+\s[0-9]{4})\s([0-9]+:[0-9]+)/";
        $chain = "Dipak Misra - 18 Nov 2018 10:20";
        preg_match_all($pattern, $chain, $matches);
        
        $data = [
            'chain' => $chain,
            'pattern' => $pattern,
            'name' => $matches[1],
            'date' => $matches[2],
            'time' => $matches[3]
        ];
        
        echo "<pre>";
        print_r($data);
        echo "<pre>";
        

        输出

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 2016-03-07
          • 2018-04-04
          • 1970-01-01
          相关资源
          最近更新 更多