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)
trypreg\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);