通过regexp匹配字符串的不匹配部分

时间:2018-02-01 12:15:08

标签: php regex pcre

我有像这样的HTML字符串......

Lorem Ipsum<span class="removed">removed</span><span class="added">added </span>lorem ipsum

我想把字符串放在一个范围内,所以我希望它像

<span class="normal">Lorem Ipsum</span><span class="removed">removed</span><span class="added">added </span><span class="normal">lorem ipsum</span>

我可以分解所有字符串并再次使用一些代码行进行组合,但是我想问如果可以使用正则表达式吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

请注意,regexp针对特定情况进行了简化,并且可以进行改进以处理更复杂的情况(cdata,comment,quotes等)

搜索

<span(?>[^>]*>.*?<\/span>)(*SKIP)(?!)|([^<]*)

替换为

<span class="normal">\1</span>

regex101 link

工作原理

  • 1:匹配我们不希望<span(?>[^>]*>.*?<\/span>)
  • 2:使用回溯动词来避免回溯并且匹配失败(*SKIP)(?!)
  • 3:在交替中接下来选择一个与第一部分不匹配的模式