[英]PHP preg_match from string
我有这个字符串:
$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
)
此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
)
$pattern = '~<!--(blapi\[(?:.*?)\])-->~si';
这种模式会产生预期的结果吗? 我了解您也想捕获blapi
部分。 但不确定...
将.*U
更改为.*?
并在末尾添加了i
(不区分大小写)。 内blapi
是一个非捕获组,而blapi[...]
现在是捕获组。
还要避免将正则表达式包装在/
因为它与URL和HTML冲突。 使用~
因为它很少使用并且更安全。 仅仅由于换行符,将http://
转义为http:\\/\\/
不好。
您还需要preg_match_all
因为preg_match
仅捕获一个匹配项。 它主要用于匹配测试,单匹配搜索,而不是多匹配搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.