Php 如何使用preg match将html标记替换为其他标记?

Php 如何使用preg match将html标记替换为其他标记?,php,regex,preg-match,Php,Regex,Preg Match,我有一个如下的字符串 <label>value1<label>:value<br> <label>value2<label>:value<br> <label>value3<label>:value<br> value1:value 值2:值 值3:值 我需要做如下安排 <li><label>value1<label><span>val

我有一个如下的字符串

<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>
value1:value
值2:值
值3:值
我需要做如下安排

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

  • 我已经试了两天了,但是运气不好。有什么帮助吗?

    这真的不应该用regex做。如果解决方案对其解析的内容进行了大量假设,那么您可能能够捏造出一个有效的解决方案,但如果内容与预期的内容有任何显著的偏差,那么它将始终是脆弱的,并且容易损坏

    更好的选择是使用PHP的类集合。我真的不能自由地为您编写代码(无论如何,这不是我的目的),但我可以给您一个关于您需要遵循的步骤的指针

  • 定位标签后面和BR前面的文本节点(此处XPath可能有用)
  • 将文本节点放入一个跨距中
  • 将跨度插入到标签后面的DOM中
  • 卸下BR
  • 将标签和跨度包裹在一个li中

  • 如果为了正则表达式,您应该使用它,那么如下所示:

    $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>
    */
    
    $string=Array
    (
    [0]=>value1:值
    [1] =>值2:值
    [2] =>值3:值
    )
    [1] =>阵列
    (
    [0]=>值1
    [1] =>值2
    [2] =>值3
    )
    [2] =>阵列
    (
    [0]=>值
    [1] =>值
    [2] =>值
    )
    )
    */
    $content=“”;
    foreach($key=>$match)
    {
    $content.=“
  • {$matches[1][$key]}{$matches[2][$key]}
  • \n”; } 回声(内容); /* 输出:
  • 值1值
  • value2value
  • 值3值
  • */
  • 色素沉着匹配?基于颜色的匹配?对不起,兄弟。拼写错误。无法使用正则表达式解析HTML。第三方​本校的一个月月内,本校的一个月月内的一个月内,该校的一个月内的一个月内的一个月内的一个月内的一个月内的一个月内的一个月内的一个月内的一个月内的本本本本本本本校的本本本本本校的本本本本本本月月月内的本本本本月月月月月的本本本本本本月月月月月的本本本本本本本月月月月月月月的本本本本本本月月月月的本本本本本月月月的本本本本月月月月月月月月的本本本本本本月月月的8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8日日日日日日,本本本本本本本本本本本本本本本本本月月月月月月月月月月的本本本本本本本本本本第二个
    是否应该是
    ?最后一个