如何在一个正则表达式中组合多个条件 - PHP

How to combine multiple conditions in one regex expression - PHP

这是我的例子http://regexr.com/3dii7

我想删除括号(<>{})中的所有内容,除了以 |b}|URL}

结尾的内容

第一个工作模式是{.*[^\|b]}

第二种工作模式是{(((?!\|URL).)*?)}

第三个<.*>

如何在一个 preg_replace() 调用中将它们组合在一起?

不应删除

{jelly3|b}
{jelly3|URL}
{文字列|b}
{文字列|URL}

我试过 {.*[^\|b]}|{(((?!\|URL).)*?)}|<.*> 但它不起作用,它会删除每个 {}。这里是linkhttp://www.phpliveregex.com/p/fVF

在这种情况下,使用两个负前瞻似乎可行:

<.*>|\{(?!.*\|URL\})(?!.*\|b\}).*\}

或者只有 1 个否定前瞻:

<.*>|\{(?!.*\|(?:URL|b)\}).*\}