2015-06-10 45 views
6

我想將標記中的字符串拆分爲不同的部分。PHP拆分或爆炸字符串<img>標記

$string = 'Text <img src="hello.png" /> other text.'; 

下一個函數還沒有正確的工作方式。

$array = preg_split('/<img .*>/i', $string); 

輸出應該

array(
    0 => 'Text ', 
    1 => '<img src="hello.png" />', 
    3 => ' other text.' 
) 

我應該使用什麼樣的模式來完成它?

編輯 如果有多個標籤怎麼辦?

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

和輸出應該是:

array (
    0 => 'Text ', 
    1 => '<img src="hello.png" />', 
    3 => 'hello ', 
    4 => '<img src="bye.png" />', 
    5 => ' other text.' 
) 

回答

2

你是在正確的道路。你必須設置標誌PREG_SPLIT_DELIM_CAPTURE這樣:

$array = preg_split('/(<img .*>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

使用多個標籤正確編輯的正則表達式:

$string = 'Text <img src="hello.png" > hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img[^>]+\>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

這將輸出:

array(5) { 
    [0]=> 
    string(5) "Text " 
    [1]=> 
    string(22) "<img src="hello.png" >" 
    [2]=> 
    string(7) " hello " 
    [3]=> 
    string(21) "<img src="bye.png" />" 
    [4]=> 
    string(12) " other text." 
} 
+0

這是過時的?當我嘗試回顯這段代碼時,我只看到:'array' – twan

+0

@twan,你是怎麼使用它的? – Federkun

+0

我已經修復它,使用回聲而不是print_r($ array)哈哈。 – twan

1

您需要包括非貪婪的字符(),如here所描述的那樣,以迫使它抓住第一次發生實例。 '/(<img .*?\/>)/i'

所以你的示例代碼將是這樣的:

$string = 'Text <img src="hello.png" /> hello <img src="bye.png" /> other text.'; 
$array = preg_split('/(<img .*?\/>)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); 

var_dump($array); 

這樣就可以使印刷:

array(5) { 
    [0] => 
    string(5) "Text " 
    [1] => 
    string(23) "<img src="hello.png" />" 
    [2] => 
    string(7) " hello " 
    [3] => 
    string(21) "<img src="bye.png" />" 
    [4] => 
    string(12) " other text." 
}