簡體   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