2017-08-30 108 views
1

我需要刪除具有特定類別和屬性的<span class="" data-nid="">標籤。我在StackOverflow上查找了所有類似的答案,但無濟於事。刪除具有特定類別和屬性的span標籤

我試圖刪除任何跨度標籤是這樣的:

<span class="article-id post-id" data-nid="12563">some text</span> 

這裏是我的嘗試,但它不工作:

function remove_post_image($content){ 

     // replace any span with specific class 

    $content = preg_replace('#<span class="article-id post-id".*?>(.*?)</span>#i', '', $content); 


     return $content; 
    } 
    add_action('content_save_pre', 'remove_post_image'); 
+1

這是否必須在PHP?試圖將HTML作爲一個字符串來操作有很多複雜性,用JavaScript或其他能夠將HTML完全解析爲DOM的東西(並且記住,HTML不是XML)要容易得多。例如在jQuery中:'$('。article-id.post-id')。remove()'。 –

+0

是的請,PHP的正則表達式或MySQL查詢。 –

+0

很確定MySQL做什麼特別的事情是不可能的(一個擴展也許可以做到),而正則表達式可能只有當你能100%保證如何生成HTML時(如果'class'不是第一個屬性呢?這些類是以另一種順序存在,還是有額外的類?如果存在嵌套跨度,如何確保匹配正確的結束標記?如果在引用屬性中存在未轉義的'>',該怎麼辦?等等。 –

回答

1

嘗試:

/<(span)\b.*?class=(['"\s]?)article-id post-id\2.*?>.*?<\/\1>/gi

演示:https://regex101.com/r/yYF7x6/1

+0

$ content = preg_replace('/ <(span)\ b。*?class =([''\ s]? )article-id post-id \ 2。*?>。*?<\/\1>/gi','',$ content); 它返回分析錯誤:語法錯誤,意外''' –

+0

您應該注意許多假設這樣做的HTML,就像沒有嵌套'SP一個'',沒有額外的空白空間等等 –

+0

我想你需要在代碼中''''' –