簡體   English   中英

如何使用preg-match將html標簽替換為其他標簽?

[英]How to replace html tag with other tags using preg-match?

我有一個類似下面的字符串。

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

我需要安排如下

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

我已經嘗試了這最后兩天,但沒有運氣。有幫助嗎?

這真的不是您應該使用正則表達式執行的操作。 如果它對要解析的內容進行了很多假設,您也許可以將一個可行的解決方案組合在一起,但是,如果該內容與預期的任何重大偏離,它將始終脆弱且易於破壞。

更好的選擇是使用PHP的DOM系列類。 我並不是真正為您編寫代碼的人(無論如何這不是SO的意思),但是我可以為您提供有關您需要遵循的步驟的指導。

  1. 找到跟隨標簽且在BR之前的文本節點(XPath在這里可能有用)
  2. 將文本節點放入跨度。
  3. 在標簽后將跨度插入DOM
  4. 卸下BR。
  5. 包裝標簽並跨度

如果為了正則表達式,您應該使用它,請按照以下步驟操作:

$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>
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM