我希望只用一个正则表达式来获得一个非常简单的日期('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。你能帮我理解我的错吗?
答案 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);
?>
Array
(
[0] => Array
(
[0] => Monday January
)
[1] => Array
(
[0] => Monday
)
[2] => Array
(
[0] => January
)
)