正则表达式多行时间

时间:2017-03-14 22:02:05

标签: php regex

为什么这个正则表达式不适用于换行符?

preg_match("/((?:(?:(?:[0][1-9]|1[0-2]|[0-9]):[0-5][0-9])\s(?:AM|PM)))/msiU", $input, $output_array);

不符合

text 13:30
PM moretext

请参阅:http://www.phpliveregex.com/p/joB

1 个答案:

答案 0 :(得分:0)

你发布的正则表达式似乎是想从多行字符串中获取时间。

好的,正则表达式“\ s”匹配任何新行,但是对于你的字符串,可能有任意数量的空格。

解决方案:

将\ s替换为\ s *

/((?:(?:(?:[0][1-9]|1[0-2]|[0-9]):[0-5][0-9])\s(?:AM|PM)))/msiU

/((?:(?:(?:[0][1-9]|1[0-2]|[0-9]):[0-5][0-9])\s*(?:AM|PM)))/msiU

\ s *允许您匹配任意数量的空格字符。

您可以在https://regex101.com/r/9Sz2Oi/1

调试正则表达式

您在http://www.phpliveregex.com/p/joC修正的脚本(*使用preg_match_all)