正则表达式 php match_all

regex php 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);

我用 "Monday January" 尝试这个,希望得到星期一和一月,但我只得到 "Monday","Monday Tuesday" 也是如此。我可以使用两个 preg_function,但我确信我可以只调用一个 preg_match_all。你能帮我理解我的错误吗?

您想匹配输入字符串中的 2 个实体,但您只构建了具有替代项的 1-entity return 模式(1|2|3|4 将 return 只有 1 个结果)。要解决此问题,我们应该捕获 2 组字符,在您的情况下由 space 分隔。

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

<?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                                                                                                                                                                                                                             
        )                                                                                                                                                                                                                                              

)