2017-08-30 107 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

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