代码之家  ›  专栏  ›  技术社区  ›  hsatterwhite

我该如何替换以下内容?

  •  0
  • hsatterwhite  · 技术社区  · 14 年前

    我已经得到了这个代码片段,我将在不同的地方替换它,我想知道如何编写模式来preg_替换它?谢谢!

    <div class="leftside item1"> 
         <label for="item1">Item1</label> 
    </div>
    

    我想换成:

    <div class="leftside item1"> 
         <label for="item1">Item1</label> 
    </div>
    <div class="rightside item1_select"> 
    <select class="item1_select" id="item1_select"> 
        <option value="">Select one</option> 
        <option value="1">1</option> 
        <option value="2">2</option> 
    </select>
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Wrikken    14 年前

    如果要完全替换它,并且代码是常量,请使用 str_replace() . 如果实际字符串有所不同,请不要使用regex,因为它们实际上与XML/HTML或SGML不太匹配,请使用解析器( DOMDocument 例如,使用一个xpath查询和一些nodem操作)。

    $html = '<div class="leftside item1">
         <label for="item1">Item1</label>
    </div>
    <p>aa</p>
    <div class="leftside item1">
         <label for="item1">Item1</label>
    </div>';
    
    $d = new DOMDocument();
    $d->loadHTML($html);
    $add = $d->createDocumentFragment();
    
    $x = new DOMXPath($d);
    $list = $x->query("//div[@class='leftside item1']");
    if($list->length){
        foreach($list as $divnode){
            $add->appendXML('<div class="rightside item1_select">
              <select class="item1_select" id="item1_select">
                <option value="">Select one</option>
                <option value="1">1</option>
                <option value="2">2</option>
              </select>
            </div>');
            if($divnode->nextSibling instanceof DOMNode){
                $divnode->parentNode->insertBefore($add,$divnode->nextSibling);
            } else {
                $divnode->parentNode->appendChild($add);
            }
        }
    }
    echo $d->saveHTML();