正则表达式 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
)
)
我想用一个正则表达式得到一个非常简单的日期('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
)
)