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

时间:2015-02-12 14:45:40

标签: php regex preg-match

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

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

我尝试了很多模式,但没有一种方法按照我希望的方式工作。

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

3 个答案:

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

相关问题