我正在尝试从以下行中提取开始日期,其中两个日期都是动态的April 1, 2017。preg_match_all()for April 1, 2017 to April 30, 2017$contents = "for April 1, 2017 to April 30, 2017";if(preg_match_all('/for\s(.*)+\s(.*)+,\s(.*?)+ to\s[A-Za-z]+\s[1-9]+,\s[0-9]\s/', $contents, $matches)){ print_r($matches);}
1 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
如果您想匹配整个字符串并匹配 2 个类似日期的模式,您可以使用 2 个捕获组。
请注意,它不会验证日期本身。
\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b
在零件
\bfor\h+
字边界、匹配for
和 1+ 个水平空白字符(
捕获组 1\w+\h+\d{1,2}
匹配 1+ 个单词字符、1+ 个水平空白字符和 1 个或 2 个数字,\h+\d{4}
匹配逗号、1+ 水平空白字符和 4 位数字)
关闭组\h+to\h+
to
1+ 水平空白字符之间的匹配(
捕获组 2(?1)
捕获组 1 的子程序调用(组 1 的模式相同,因为它是相同的逻辑))
关闭组\b
字边界
例如
$re = '/\bfor\h+(\w+\h+\d{1,2},\h+\d{4})\h+to\h+((?1))\b/';
$str = 'for April 1, 2017 to April 30, 2017';
preg_match_all($re, $str, $matches);
print_r($matches)
输出
Array
(
[0] => Array
(
[0] => for April 1, 2017 to April 30, 2017
)
[1] => Array
(
[0] => April 1, 2017
)
[2] => Array
(
[0] => April 30, 2017
)
)
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消