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
标志仅在使用*
时使用。