【问题标题】:PHP regex select word that contain specific character from stringPHP 正则表达式从字符串中选择包含特定字符的单词
【发布时间】:2018-07-07 02:21:30
【问题描述】:

000001 0001 000000000000001975 00 02 0 000 2017/12/13 14:13:27

我正在用 laravel 开发一个系统。 这是我从 csv 文件中得到的字符串。我需要选择这个日期和时间。成一个数组。如果我可以选择包含 : (14:13:27) 的单词,我可以获得时间和相同的日期。

【问题讨论】:

  • strpos($string_from_csv, $string_to_check);
  • 我想从 (000001 0001 0000000000000001975 00 02 0 000 2017/12/13 14:13:27) 字符串中获取 (14:13:27) 字
  • 如果你在太空中爆炸,你会有一个简单的数组来使用
  • 我做了,但在生成的数组中,时间并不总是在 dame 数组元素中。有时它在第 12 元素中,有时在第 13 元素中。这就是为什么我打算用正则表达式来做到这一点

标签: php regex laravel


【解决方案1】:

一个简单的解决方案是 -

$string= "000001 0001 000000000000001975 00 02 0 000 2017/12/13 44:13:27";
preg_match("/([0-9]+):([0-5][0-9]):([0-5][0-9])/", $string, $matches);

echo $matches[0];

【讨论】:

    【解决方案2】:

    试试这个模式:

    /(\d{4}\/[^ ]+) \K([\d:]+)/
    

    Online Demo

    【讨论】:

      【解决方案3】:

      我仍然不清楚 OP 的确切期望输出,但我对其他答案中的模式更加不知所措。我将发布这组解决方案以改进 Stackoverflow,因为我找不到合适的副本来关闭。

      我使用波浪符~ 作为模式分隔符,这样模式中的/ 字符就不需要转义。另外,请注意我没有调用 \K 来重新开始全字符串匹配,因为没有理由这样做。

      代码:(Demo)

      $string='000001 0001 000000000000001975 00 02 0 000 2017/12/13 14:13:27';
      
      var_export(preg_match('~\d{4}/\d{2}/\d{2}~',$string,$out)?$out:[]); // date
      echo "\n\n";
      var_export(preg_match('~\d{2}:\d{2}:\d{2}~',$string,$out)?$out:[]); // time
      echo "\n\n";
      var_export(preg_match('~\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}~',$string,$out)?$out:[]); // full datetime
      echo "\n\n";
      var_export(preg_match('~(\d{4}/\d{2}/\d{2}) (\d{2}:\d{2}:\d{2})~',$string,$out)?$out:[]); // capture date and time
      echo "\n\n";
      var_export(preg_match_all('~\d{4}/\d{2}/\d{2}|\d{2}:\d{2}:\d{2}~',$string,$out)?$out:[]); // capture date or time
      echo "\n\n";
      var_export(preg_match('~(\d{4})/(\d{2})/(\d{2}) (\d{2}):(\d{2}):(\d{2})~',$string,$out)?$out:[]); // capture date digits and time digits
      

      输出:

      // date
      array (
        0 => '2017/12/13',
      )
      
      // time
      array (
        0 => '14:13:27',
      )
      
      full date time
      array (
        0 => '2017/12/13 14:13:27',
      )
      
      // capture date and time
      array (
        0 => '2017/12/13 14:13:27',
        1 => '2017/12/13',
        2 => '14:13:27',
      )
      
      // capture date or time
      array (
        0 => 
        array (
          0 => '2017/12/13',
          1 => '14:13:27',
        ),
      )
      
      // capture date digits and time digits
      array (
        0 => '2017/12/13 14:13:27',
        1 => '2017',
        2 => '12',
        3 => '13',
        4 => '14',
        5 => '13',
        6 => '27',
      )
      

      附言对于未来的读者,如果您需要比这更强大的日期验证,那么正则表达式可能不适合您的任务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 2021-11-01
        • 2022-01-27
        相关资源
        最近更新 更多