我有一个多行字符串,如:
$msg = "Fix #1: This is a message
Fix #2
Fix #5";
我尝试了很多模式,但都没有达到我想要的效果。
我希望preg_match返回一个包含1、2和5的数组。该模式应该检查所有Fix#NUM,并返回数组中的所有NUM。
您可以使用preg_match_all()
,只需匹配数字即可返回所需结果。
preg_match_all('/'d+/', $msg, $matches);
var_dump($matches[0]);
如果匹配之前需要Fix #
,您可以使用以下内容:
preg_match_all('/Fix's+#'K'd+/', $msg, $matches);
这与"Fix"后面跟着空白字符"一次或多次"后面跟着#匹配。
'K
转义序列重置报告匹配的起始点,并且不再包括任何以前使用的字符。
如果Fix #
必须在数字前面,那么应该这样做:
/(?<=Fix's+#)'d+/
否则这是好的:
/'d+/
您需要将preg_match_all
与此'd+
正则表达式一起使用,因为preg_match
只返回一个匹配项。它不会进行全球比赛。