使用正则表达式无法获取预期的日期格式

时间:2016-12-08 10:19:17

标签: php regex date preg-replace preg-match

我正在尝试使用正则表达式从文本详细信息中提取日期,但正在使用它的正则表达式什么都不返回。

我用来从字符串中提取日期的PHP代码:

<?php 
preg_match("/(\w\w\w)\,(\w\w\w) (\d\d)\,(\d\d\d\d) at (\d\d)\:(\d\d)   ([A|P]M)/", $input_line, $output_array);

?>

输入字符串示例:

kardashian, kim this is dummy text area
mercury, freddie Tue, Aug 23, 2016 at 2:21 PM
22.11.2016 08:58 AM
last_name, first_name
bjorge, philip 

预期产出:

Tue, Aug 23, 2016 at 2:21 PM

请让我知道为什么我的正则表达式不起作用。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以通过添加空间匹配子模式来修复此表达式,例如:匹配任何空格的\s,或仅匹配水平空格的\h

/\b(\p{L}{3}),\s(\p{L}{3})\s(\d\d),\s(\d{4})\sat\s(\d\d?):(\d\d)\s([AP]M)/
              ^^          ^^       ^^       ^^  ^^                   

请参阅regex demo

只要空格是可选的,就在它之后添加*量词。

另外,要匹配TueAug,您可以使用\p{L}{3}模式(3个字母)。而不是\d\d\d\d,您可以写一个更短的\d{4}等价物。建议使用前面的\b字边界,因为您需要将第一个3个字母的单词作为整个单词进行匹配。

此外,[A|P]匹配A|P,您需要从字符类中删除|