繁体   English   中英

PHP preg_match来自字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM