【问题标题】:Regex for replacing a specific tag inside any html tag用于替换任何 html 标签内的特定标签的正则表达式
【发布时间】:2013-10-03 04:08:44
【问题描述】:

在我的一个应用程序中,我需要去除或删除所有 html 标签属性中的特定标签,例如:

 <div<del>class</del>=<del>"example"</del>>

我想删除所有这些从服务器端脚本生成的&lt;del&gt; 标签。我正在使用以下preg_replace

  preg_replace("/<.*?>/", "", $string);

但它正在替换所有标签,我只想替换 html 标签中的标签。我不想删除所有&lt;del&gt; 标签。我只想删除那些出现在 html 标签中的&lt;del&gt; 标签。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    使用正则表达式:

    <[^<>]+>
    

    其中[^&lt;&gt;]+ 是一个否定类,匹配除&lt;&gt; 之外的所有字符。

    regex101 demo

    但是,如果你有 html 标签,但里面没有这些标签,它也会替换 html 标签。

    如果是这样,你可以试试这个正则表达式:

    (?<==|")<[^<>]+>
    

    编辑:如果您的问题是具体的,您应该更具体地提出问题。

    只需使用正则表达式替换:

    <\/?del>
    

    【讨论】:

    • itz 对我不起作用...它替换了所有标签以及所有属性值,但我只想删除属性值内的标签
    • 我想删除 html 标签属性值中的特定 '' 标签
    • @VarinderKaur 您能否在此处的示例代码中发布它如何不起作用:viper-7.com
    【解决方案2】:

    你可以这样做:

    preg_replace('/(?>(?><|\G(?<!^))[^<>]++\K|\G(?<!^))<[^>]++>/', '', '<div class=<some_tag>"example"</some_tag>>');
    

    图案细节:

    (?>            # non capturing group (atomic)
        (?>
            <|\G(?<!^)   # < or a contigous match
        )
        [^<>]++\K  # common content of the good tag until a bracket (\K reset the match)
      |            # OR
        \G(?<!^)   # a contiguous match not at the start of the string
    )              # close the non capturing group
    <[^>]++>       # the ugly tag to remove
    

    【讨论】:

    • 不适用于&lt;div class=&lt;some_tag&gt;"example"&lt;/some_tag&gt;&gt;&lt;div class=&lt;tag&gt;'quot="'&lt;/tag&gt; id="divid"&gt;&lt;/div&gt;
    • @CasimiretHippolyte 你能帮我从&lt;script&gt;&lt;style&gt;标签块中去掉&lt;del&gt;标签吗???
    【解决方案3】:

    你可以使用这个功能来做

    strip_tags('<div<del>class</del>=<del>"example"</del>>', '<del>');
    

    如果你使用 strip_tags 函数,你会得到以下输出

    '<div class="example">'
    

    祝你好运……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      相关资源
      最近更新 更多