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

如何在一个正则表达式中组合多个条件-PHP,php,regex,preg-replace,Php,Regex,Preg Replace,这是我举的一个例子 我想删除括号(和{})中的所有内容,但以|b}和|URL}结尾的内容除外 第一种工作模式是{.[^\\\|b]} 第二种工作模式是{(((?!\\124; URL)。*?)} 第三个 如何将它们组合在一个preg\u replace()调用中 不应该被删除 {jelly3|b} {jelly3|URL} {文字列|b} {文字列|URL} 我试过{.[^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

这是我举的一个例子

我想删除括号(
{}
)中的所有内容,但以
|b}
|URL}
结尾的内容除外

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

第二种工作模式是
{(((?!\\124; URL)。*?)}

第三个

如何将它们组合在一个
preg\u replace()
调用中

不应该被删除

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

我试过
{.[^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。下面是使用两个负面外观的链接,在这种情况下似乎有效:

{(?。*\\\\\\\\})(?!.\\\\\\\\\\\\\}.*\}
或者只有1个负前瞻:

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

您确定您的模式有效吗?您是否在一行中使用多组括号进行了测试?另外,第二种模式与
{a | URL | hello}
不匹配,但根据您的描述,它应该匹配。@Sebastian Proske是的,您是对的,谢谢您指出。我必须修复它。您可以通过将多个表达式与
|
组合来匹配它们
xxx | yyy
匹配
xxx
yyy
@Barmar谢谢您的评论。我试过:)我更新了我的问题。@whitesiroi如果没有嵌套的括号,没有引用的括号和括号总是平衡的,那就行了。非常感谢mate的帮助。这将为包含多个组的行提供帮助。不确定你是否必须考虑这个问题。Sebastian Proske有趣:谢谢你的帮助。我肯定要写一些测试代码。对于包含多个组的行,这确实有点棘手。但是,如果将.*替换为[^}],它就可以工作。比如:
\{(?![^}]*\\\(?:URL{124; b)\})[^}]*\}
<.*>|\{(?!.*\|(?:URL|b)\}).*\}