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