preg_match_all print*all*matches

2 php preg-match-all

我需要使用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[]的.

Tim*_*ter 7

$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)

这将打印出每个匹配字符串的第一个捕获表达式.