2012-11-19 56 views
2

我有一個像下面這樣的字符串。如何使用preg-match將html標籤替換爲其他標籤?

<label>value1<label>:value<br> 
<label>value2<label>:value<br> 
<label>value3<label>:value<br> 

,我需要這個安排如下

<li><label>value1<label><span>value</span><li> 

我已經嘗試了這最後2天,但沒有luck.Any幫助?

+2

色素沉着的比賽?基於顏色匹配? – 2012-11-19 09:15:51

+0

對不起兄弟。拼寫錯誤。 – user1835277

+2

你不能用正則表達式解析HTML。 http://stackoverflow.com/a/1732454/477127 – GordonM

回答

0

這真的不是你應該用正則表達式做的事情。如果解決方案對解析的內容做了大量假設,您可能可以將這些解決方案融合在一起,但如果內容偏離預期的任何重要程度,它總是會變得脆弱並易於中斷。

更好的選擇是使用PHP的DOM family類。我沒有真正的自由爲你編寫代碼(而且這也不是什麼問題),但是我可以給你一個關於你需要遵循的步驟的指針。

  1. 找到遵循標籤和先於BR文本節點(XPath的可以在這裏有用)
  2. 把文本節點爲跨度。
  3. 在標籤後插入跨度到DOM
  4. 刪除BR。
  5. 包裝標籤和跨度在李
+0

我已經修復了它。 – GordonM

0

如果,正則表達式的緣故,你應該使用它然後按照如下:

$string = <<<TOK 
<label>value1<label>:value<br> 
<label>value2<label>:value<br> 
<label>value3<label>:value<br> 
TOK; 
preg_match_all('/<label>(.*?)<label>\:(.*?)<br>/s', $string, $matches); 
print_r($matches); 
/* 
Array 
(
    [0] => Array 
     (
      [0] => value1:value 
      [1] => value2:value 
      [2] => value3:value 
     ) 
    [1] => Array 
     (
      [0] => value1 
      [1] => value2 
      [2] => value3 
     ) 

    [2] => Array 
     (
      [0] => value 
      [1] => value 
      [2] => value 
     ) 
) 
*/ 
$content = ""; 
foreach($matches as $key => $match) 
{ 
    $content.= "<li><label>{$matches[1][$key]}<label><span>{$matches[2][$key]}</span><li>\n"; 
} 
echo($content); 
/* 
Output: 
    <li><label>value1<label><span>value</span><li> 
    <li><label>value2<label><span>value</span><li> 
    <li><label>value3<label><span>value</span><li> 
*/