PHP preg_match 从字符串中提取某个数字

PHP preg_match to extract a certain number from a string

我有一个多行字符串,例如:

$msg = "Fix #1: This is a message
Fix #2
Fix #5";

我尝试了很多模式,但 none 以我希望的方式工作。

我想要 preg_match 做的是 return 一个包含 1、2 和 5 的数组。该模式应该检查所有 Fix #NUM 和 return 中的所有 NUM一个数组。

您需要将 preg_match_all 与此 \d+ 正则表达式一起使用,因为 preg_match 只会 return 一个匹配项。它不会进行全局匹配。

您可以使用 preg_match_all() 并简单地将数字单独匹配到 return 所需的结果。

preg_match_all('/\d+/', $msg, $matches);
var_dump($matches[0]);

如果匹配需要在前面加上Fix #,你可以使用下面的:

preg_match_all('/Fix\s+#\K\d+/', $msg, $matches);

这匹配 "Fix" 后跟空格字符 "one or more" 次后跟 #。

\K 转义序列重置报告匹配的起点,并且不再包括任何以前使用的字符。

如果 Fix # 必须在数字前面,那么应该这样做:

/(?<=Fix\s+#)\d+/

否则这很好:

/\d+/