正则表达式php match_all

时间:2015-04-09 08:38:30

标签: php regex preg-match-all

我希望只用一个正则表达式来获得一个非常简单的日期('day_month',例如'Monday january')。这是我尝试的:

$str = $argv[1];
$day = "[Mm]onday|[Tt]uesday|...|[Ss]unday";
$month = "|[Jj]anuary|[Ff]ebruary|...|[Dd]ecembre";
$pattern = "'~".$day.$month."~'";

if (preg_match_all($pattern, $str, $array) == 0)
    print("wrong format");
else
    print_r($array);

我试着用“星期一1月”,期待周一和1月,但我只得到“星期一”,同样的事情是“星期一”。我可以使用两个preg_function,但我只能调用一次preg_match_all。你能帮我理解我的错吗?

1 个答案:

答案 0 :(得分:1)

您希望匹配输入字符串中的 2 实体,但您只使用备选方案构建1实体返回模式(1|2|3|4将仅返回1个结果)。要解决这个问题,我们应该捕获两组由你的空格中的空格分隔的字符。

您可以使用此代码同时获取:

<?php
  $str = "Monday January";
  $day = "[Mm]onday|[Tt]uesday|[Ss]unday";
  $month = "[Jj]anuary|[Ff]ebruary|[Dd]ecembre";
  $pattern = "~(" . $day . ")\s+(" . $month . ")~";

  if (preg_match_all($pattern, $str, $array) == 0)
     print("wrong format");
  else
     print_r($array);
?>

Sample program输出:

Array
(                                                                                                                                                                                                                                                      
    [0] => Array                                                                                                                                                                                                                                       
        (                                                                                                                                                                                                                                              
            [0] => Monday January                                                                                                                                                                                                                      
        )                                                                                                                                                                                                                                              

    [1] => Array                                                                                                                                                                                                                                       
        (                                                                                                                                                                                                                                              
            [0] => Monday                                                                                                                                                                                                                              
        )                                                                                                                                                                                                                                              

    [2] => Array                                                                                                                                                                                                                                       
        (                                                                                                                                                                                                                                              
            [0] => January                                                                                                                                                                                                                             
        )                                                                                                                                                                                                                                              

)