我有一个多行字符串,如:
$msg = "Fix #1: This is a message
Fix #2
Fix #5";
我尝试了很多模式,但没有一种方法按照我希望的方式工作。
我想要preg_match做的是返回一个包含1,2和5的数组。模式应检查所有Fix #NUM并返回数组中的所有NUM。
答案 0 :(得分:1)
您可以使用preg_match_all()
并简单地仅匹配数字以返回所需的结果。
preg_match_all('/\d+/', $msg, $matches);
var_dump($matches[0]);
如果匹配项必须以Fix #
开头,则可以使用以下内容:
preg_match_all('/Fix\s+#\K\d+/', $msg, $matches);
匹配"修复"其次是空白字符"一个或多个"时间后跟#。
\K
转义序列会重置报告的匹配的起始点,并且不再包含任何以前消耗的字符。
答案 1 :(得分:1)
如果Fix #
必须在数字前面,那么这样的事情就应该这样做:
/(?<=Fix\s+#)\d+/
否则这很好:
/\d+/
答案 2 :(得分:0)
您需要preg_match_all
使用此\d+
正则表达式,因为preg_match
只会返回一个匹配项。它不会进行全球比赛。