我需要使用preg_match_all打印所有匹配项.
$search = preg_match_all($pattern, $string, $matches);
foreach ($matches as $match) {
echo $match[0];
echo $match[1];
echo $match[...];
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道我的字符串中有多少匹配,即使我知道并且如果它是1000,那么键入所有那些将是相当愚蠢$match[]的.
的$match[0],$match[1]等等,项目不是个人的比赛,他们是"捕获".
无论有多少匹配,输入的数量$matches都是不变的,因为它基于您要搜索的内容,而不是结果.在搜索模式中,每对捕获括号总是至少有一个条目加一个条目.
例如,如果你这样做:
$matches = array();
$search = preg_match_all("/\D+(\d+)/", "a1b12c123", $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)
匹配将只有两个项目,即使找到了三个匹配项. $matches[0]将是一个包含"a1","b12"和"c123"(每个项目的整个匹配)的数组,并且$matches[1]将仅包含每个项目的第一个捕获,即"1","12"和"123".
我想你想要的更像是:
foreach ($matches[1] as $match) {
echo $match;
}
Run Code Online (Sandbox Code Playgroud)
这将打印出每个匹配字符串的第一个捕获表达式.