Php 多行上的正则表达式时间

Php 多行上的正则表达式时间,php,regex,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 请参阅:从您发布的正则表达式中,似乎希望从多行字符串中获取时间 好的,正则表达式“\s”匹配任何新行,但是对于字符串,可以有任意数量的空格 解决方案: 将\s替换为\s* /((?:(?:[0][1-9

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

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

请参阅:

从您发布的正则表达式中,似乎希望从多行字符串中获取时间

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

解决方案:

将\s替换为\s*

/((?:(?:[0][1-9]| 1[0-2][0-9]):[0-5][0-9])\s(?:上午|下午))/msiU

/((?:(?:[0][1-9]| 1[0-2][0-9]):[0-5][0-9])\s*(?:上午|下午))/msiU

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

您可以在以下位置调试正则表达式:


您在(*Use preg_match_all)

处更正的脚本可以使用
\s+
\s*
进行尝试,因为您的换行符可能由多个字符组成。
am
/
pm
可以简化为
[AP]M
。哈,这有多简单?@Scuzzy消除了非捕获组和更改,此处不需要
m
s
标志。
m
标志仅在使用
^
$
锚定时有用。而
s
标志仅在使用
*
时使用。