匹配两个部分相同的次数

时间:2010-12-30 12:29:55

标签: regex preg-replace pcre

我正在搜索解析以下内容的代码:

一些texttext

我需要删除不必要的<span>次出现,因此输出为:

一些texttext

我写了一个正则表达式,它执行过一次:

/ [^&LT;] * LT; / SPAN&GT; / I

如何在<span></span>上完成同样的工作次数?

2 个答案:

答案 0 :(得分:0)

您可以尝试查看<span>是否会被另一个<span> 直接跟着,而其匹配的</span>会被另一个</span>直接添加。

但实际上你不能说那个跨度是没用的,因为可以将标记添加到那些特定的跨度中。如果没有任何标记,则最后剩余的跨度也是无用的,也可能也被删除。

答案 1 :(得分:0)

$result = preg_replace(
    '%(?<=<span>)        # Assert that there is a directly preceding span tag
    <span>               # Match a span tag
    ((?:(?!</?span>).)*) # Match the contents of the tag only if they do not include another span tag
    </span>              # Match a closing span tag
    (?=</span>)          # Assert that there is a directly following span tag
    %six', 
    '\1', $subject);

将适用于您的示例,但必须应用两次,因为它会在每次迭代时删除一个嵌套span标记的“图层”。

因此,对于任意嵌套的标记,您需要为每个嵌套级别调用一次。