2016-11-29 82 views
0

一個特定的ID我有這樣的HTML代碼:替換所有的字符串<a>標籤,除了使用了preg_replace

$html='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> 
    <head> 
     <meta name="viewport" content="width=device-width" /> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

    </head> 

    <body itemscope itemtype="http://schema.org/EmailMessage" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6"> 

     <table class="body-wrap" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;" bgcolor="#f6f6f6"><tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><td style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td> 
       <td class="container" width="600" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;" valign="top"> 
        <div class="content" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;"> 
         <table class="main" width="100%" cellpadding="0" cellspacing="0" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;" bgcolor="#fff"><tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> 
           <td class="alert alert-warning" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #1ab394; margin: 0; padding: 20px;" align="center" bgcolor="#1ab394" valign="top"> 
            Following change has occurred in the 1st fault 4 notification. 
           </td> 
          </tr><tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><td class="content-wrap" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 20px;" valign="top"> 
            <table width="100%" cellpadding="0" cellspacing="0" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><td id="notification-detail" class="content-block" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> 
               <a class="btn-link removable no-padding" href="javascript:void(0);" onclick="goToListingByType()">Fault</a>, <a class="btn-link no-padding" href="javascript:void(0);" 
    onclick="goToDetailPageByType()">1st fault 4 notification, 14077</a> Naveed Saleem has updated the Due date of this Activity to 23rd November, 2016 
              </td> 
             </tr> 
             <tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><td class="content-block" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> 
               <a href="{{URL}}" id="login-link" class="btn-primary" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; color: #FFF; text-decoration: none; line-height: 2em; font-weight: bold; text-align: center; cursor: pointer; display: inline-block; border-radius: 5px; text-transform: capitalize; background-color: #1ab394; margin: 0; border-color: #1ab394; border-style: solid; border-width: 10px 20px;">Login Whuntu</a> 
              </td> 
             </tr><tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"><td class="content-block" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top"> 
               Thanks for choosing Company Inc. 
              </td> 
             </tr></table></td> 
          </tr></table><div class="footer" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;"> 
          <table width="100%" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> 
           <tr style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"> 
            <td class="aligncenter content-block" style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0; padding: 0 0 20px;" align="center" valign="top">Copyright © 2014-2016, Company Name, United Kingdom. All rights reserved.</td> 
           </tr></table></div></div> 
       </td> 
       <td style="font-family: Helvetica Neue,Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;" valign="top"></td> 
      </tr></table></body> 
</html> 
'; 

我要全部更換<a>標籤除了那些具有特定屬性的ID。

我是新手在正則表達式。任何人都可以請幫忙。我發現這個正則表達式替換基於類的所有標籤:

$html = preg_replace('/<(a).*?class="\s*(?:.*\s)?removable(?:\s[^"]+)?\s*"[^\>]*>(.*)<\/\1>/i', '\2', $html); 

但我到底要什麼,我說即替換所有<a>標籤與跨度除了那些具有特定ID。

非常感謝您的幫助

+0

如果你在谷歌搜索「正則表達式條件替換」,你會遇到類似這樣的語法:'(?(?=?regex)then else)'。這應該可以幫助你朝正確的方向發展。 – henrikstroem

+1

這不是一個正則表達式的工作,使用DOMDocument和DOMXPath。 –

回答

0

如果要分析結構化的語言,用這個結構,不分析它像一個簡單的文本。 PHP提供了內置的工具來解析HTML和XML:

  • DOMDocument類來創建和編輯DOM樹
  • DOMXPath類查詢DOM樹

例子:

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 
libxml_clear_errors(); 

$xp = new DOMXPath($dom); 

// select all the link nodes that don't have an id attribute 
// to discard a specific id, you can change the predicate to: not(@id="yourid") 
$linkNodeList = $xp->query('//a[not(@id)]'); 

foreach ($linkNodeList as $linkNode) { 
    // create a new span element where to store all children nodes of the link node 
    $spanNode = $dom->createElement('span'); 
    // append each child node to the span node 
    foreach($linkNode->childNodes as $childNode) { 
     $spanNode->appendChild($childNode->cloneNode(true)); 
    } 
    // replace the link node with the span node 
    $linkNode->parentNode->replaceChild($spanNode, $linkNode); 
} 

echo $dom->saveHTML(); 
相關問題