繁体   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