用于替换任何html标记内的特定标记的正则表达式

时间:2013-10-03 04:08:45

标签: php regex

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

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

我想删除从服务器端脚本生成的所有这些<del>标记。我使用以下preg_replace

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

但它正在替换所有标签,我只想替换html标签内的标签。我不想删除所有<del>标记。我只想删除那些出现在html标记内的<del>标记。

3 个答案:

答案 0 :(得分:1)

使用正则表达式:

<[^<>]+>

其中[^<>]+是与<>除外的所有字符匹配的否定类。

regex101 demo

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

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

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

编辑:如果您的问题具体,您应该在问题中更具体。

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

<\/?del>

答案 1 :(得分:1)

你可以这样做:

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

答案 2 :(得分:0)

您可以使用此功能

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

如果您使用 strip_tags 功能,您将获得以下输出

'<div class="example">'

祝你好运......