Php preg_match_all不匹配所有可能性

Php preg_match_all不匹配所有可能性,php,regex,preg-match-all,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>'; 并尝试获取字符串{{type=“???”}}中的值,它显示了奇怪的结果 我正在使用下面的代码 preg_mat

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

这是我的绳子

$html = '<p> This is my Home Page.</p><p><span style="line-height: 1.42857;">{{ type="slider" }} </span></p><p> </p>';
并尝试获取字符串
{{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/>"; 
}
我希望数组中的值写在
{{type=“
“}}}

$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>';
只有使用
{{type=“slider”}
我才能得到这个完美的结果

preg_match_all('/{{ type=\"(.+?)\" }}/', $html, $matches, PREG_SET_ORDER);
有什么想法吗


对不起,我的英语不好。

您需要通过添加
使您的正则表达式匹配非贪婪:

preg_match_all('/{{ type=\"(.+)\" }}/U', $html, $matches, PREG_SET_ORDER);
U
修饰符:


您需要通过添加
,使正则表达式与非贪婪匹配:

preg_match_all('/{{ type=\"(.+)\" }}/U', $html, $matches, PREG_SET_ORDER);
U
修饰符:


您当前得到的是非常正常的,因为默认情况下,您的regexp是贪婪的,即
/{{type=“(.+)”}/
查找以
{type=“
开始,以
}
结束的最长字符串

这里的另一个答案建议您添加一个“not greedy”量词
,它会起作用,但不是最好的解决方案(因为它需要正则表达式引擎进行更多的工作)


相反,您最好在regexp中用
([^“]+)
替换
(.+)

您当前得到的是非常正常的,因为默认情况下您的regexp是贪婪的,即
/{type=“(.+)”}/
查找以
{type=“
开头、以
}结尾的最长字符串

这里的另一个答案建议您添加一个“not greedy”量词
,它会起作用,但不是最好的解决方案(因为它需要正则表达式引擎进行更多的工作)


相反,您最好在regexp中用
([^“]+)
替换
(.+)

尝试
preg\u match\u all('/{type=\'(.+)\“}}/mi',$html$matches,preg\u SET\u ORDER)
try
preg\u match\u all('/{{type=\'(.+?)\“}}}}/mi',$html,$matches,preg\u SET\u顺序)我的正则表达式能力很差,所以我只想给你的答案投票:)好的,但这样我就无法得到类型为“”的值。@PunitGajjar可能是因为你尝试了我的第一个版本,我忘记了捕获括号!看看当前版本。@Mike谢谢你的公正态度!你能解决这个问题吗?我的正则表达式能力很差,所以我只想给你的答案投票:)好吧,但这样我就无法得到类型为“”的值。@PunitGajjar可能是因为你尝试了我的第一个版本,我忘记了捕获括号!看看当前版本。@Mike谢谢你的公正态度!你能解决这个问题吗?你能回答这个问题吗?你能回答这个问题吗?
preg_match_all('/{{ type=\"(.+)\" }}/U', $html, $matches, PREG_SET_ORDER);