我有这个字符串:
$content = 'Hello <!--blapi[getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png"]--> Hello<!--blapi[prix_p1->description]-->';
如何在数组[2]中获得两个字符串<!--*-->
?
我已经做到了:
$pattern = '/<!--blapi\[(.*)\]-->/sU';
preg_match($pattern, $content, $matches);
但我有这个结果:
array(2) {
[0]=>
string(74) "<!--blapi[getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png")]-->"
[1]=>
string(60) "getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png")"
}
我不明白为什么忽略第二个字符串<!--blapi[prix_p1->description]-->
...
我使用了标志“U”。也许我想做的事情有更好的模式?
版本: 我期待这个结果:
Array
(
[0] => getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png"]
[1] => prix_p1->description
)
答案 0 :(得分:2)
此preg_match_all
应该有效:
$content = 'Hello <!--blapi[getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png"]--> Hello<!--blapi[prix_p1->description]-->';
if ( preg_match_all('/<!--.*?\[(.*?)\]-->/', $content, $matches) )
print_r($matches[0]);
Array
(
[0] => getinfoprix("prix_p1"=>"1-6048df6;image/purchase-small.png"
[1] => prix_p1->description
)
答案 1 :(得分:1)
$pattern = '~<!--(blapi\[(?:.*?)\])-->~si';
此模式是否会产生预期效果?我知道您也希望捕获blapi
部分。但不确定......
将.*U
更改为.*?
,并在最后添加i
以区分大小写。内部blapi
是非捕获组,blapi[...]
现在是捕获组。
还要避免在/
中包装正则表达式,因为它与URL和HTML冲突。使用~
,因为它很少使用,更安全。仅仅因为换行符而将http://
转移到http:\/\/
并不好。
您还需要preg_match_all
,因为preg_match
只捕获一个匹配项。它主要用于匹配测试,单匹配搜索,但不用于多重匹配搜索。