如何在文本字符串中匹配12h时间

时间:2012-11-28 19:54:39

标签: php regex

我在Feed中有以下字符串。我需要匹配粗体部分并将其存储在变量中:

  1. Ramdom活动名称下午12:30至下午1:30
  2. Ramdom事件名称再次下午2:30
  3. 更新

    我使用了@cryptic提供的解决方案。

    结果如下:

     $titles = array( 
                    "*~Svet~* 12:30PM to 1:30PM",
                    "Basketball (M and W) vs Cleveland State 6:00PM",
                    "Christmas for the Kids Celebration! 2:00PM to 4:00PM"
                );
    
    foreach ($titles as $title) {
        //get date
        preg_match('/(\d{1,2}:\d{2}[ap]m)( to \d{1,2}:\d{2}[ap]m)?/i', $title, $match);
        //get title
        $cleanTitle = preg_split('/([0-1][0-9]|[0-9]):?([0-5][0-9])/', $title);
    
    echo "<p>Title: ".$cleanTitle[0]."<br />Time: ".$match[0]."</p>"; 
    
    }
    

    //输出

    标题: ~Svet~
    时间:下午12:30至下午1:30

    标题:篮球(男和女)vs克利夫兰州时间:下午6:00

    标题:儿童庆祝圣诞节!
    时间:下午2:00至下午4:00

2 个答案:

答案 0 :(得分:2)

// String example 1
$string = 'Ramdom Event Name 12:30PM to 1:30PM';
preg_match('/(\d{1,2}:\d{2}[ap]m)( to \d{1,2}:\d{2}[ap]m)?/i', $string, $match);
echo $match[0]; // outputs 12:30PM to 1:30PM

// String example 2
$string = 'Ramdom Event Name again 2:30PM';
preg_match('/(\d{1,2}:\d{2}[ap]m)( to \d{1,2}:\d{2}[ap]m)?/i', $string, $match);
echo $match[0]; // outputs 2:30PM

相同的regex表达式将匹配两个字符串示例,并且还将获取“to”部分。

答案 1 :(得分:0)

您可以使用以下regex解决此问题 /\d{1,2}:\d{2}(?:a|p)m(?: to \d{1,2}:\d{2}(?:a|p)m)*/i