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+/
我有一个多行字符串,例如:
$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+/