我正在尝试使用正则表达式从文本详细信息中提取日期,但正在使用它的正则表达式什么都不返回。
我用来从字符串中提取日期的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
请让我知道为什么我的正则表达式不起作用。
提前感谢您的帮助。
答案 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
只要空格是可选的,就在它之后添加*
量词。
另外,要匹配Tue
,Aug
,您可以使用\p{L}{3}
模式(3个字母)。而不是\d\d\d\d
,您可以写一个更短的\d{4}
等价物。建议使用前面的\b
字边界,因为您需要将第一个3个字母的单词作为整个单词进行匹配。
此外,[A|P]
匹配A
,|
或P
,您需要从字符类中删除|
。