preg_match_all 不匹配所有可能性

Pun*_*jar 1 php regex preg-match-all

我正在尝试检索所有匹配项,但我只收到一个

这是我的字符串

$html = '<p> This is my Home Page.</p><p><span style="line-height: 1.42857;">{{ type="slider" }} </span></p><p> </p>';
Run Code Online (Sandbox Code Playgroud)

如果你看到 string contains {{ type="slider" }} ,现在如果我只写一次这个字符串,我就得到了预期的结果,但是如果我在 html 中多次写它,就像 {{ type="slider" }} {{ type="banned" }} {{ type="testimonial" }}

$html = '<p> This is my Home Page.</p><p><span style="line-height: 1.42857;">{{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }}  </span></p><p> </p>';
Run Code Online (Sandbox Code Playgroud)

并尝试获取我的字符串中的值,{{ type=" ???? " }}它显示奇怪的结果

我正在使用下面的代码。

preg_match_all('/{{ type=\"(.+)\" }}/', $html, $matches, PREG_SET_ORDER);
echo "<pre>";
print_r($matches);
foreach ($matches as $val) {
    echo "matched: ". $val[0] . "<br/>";
    echo "My Value" . $val[1] . "<br/>"; 
}
Run Code Online (Sandbox Code Playgroud)

当前结果:

Array
(
    [0] => Array
        (
            [0] => {{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }}
            [1] => slider" }} {{ type="banner" }} {{ type="testimonial
        )

)
matched: {{ type="slider" }} {{ type="banner" }} {{ type="testimonial" }}
My Value : slider" }} {{ type="banner" }} {{ type="testimonial
Run Code Online (Sandbox Code Playgroud)

我期待数组中的结果,其值写在{{ type="和之间" }}

只有{{ type="slider" }}我得到了这个完美的结果。

Array
(
    [0] => Array
        (
            [0] => {{ type="slider" }}
            [1] => slider
        )

)
matched: {{ type="slider" }}
My Value : slider
Run Code Online (Sandbox Code Playgroud)

任何想法 ?

对不起,我的英语不好。

Mik*_*ike 6

您需要通过添加以下任一方式使正则表达式匹配非贪婪?

preg_match_all('/{{ type=\"(.+?)\" }}/', $html, $matches, PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)

U修饰符:

preg_match_all('/{{ type=\"(.+)\" }}/U', $html, $matches, PREG_SET_ORDER);
Run Code Online (Sandbox Code Playgroud)