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";

我尝试了很多模式,但都没有达到我想要的效果。

我希望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只返回一个匹配项。它不会进行全球比赛。