如何编写未嵌套在另一个模式中的正则表达式模式

时间:2014-09-12 08:54:04

标签: php regex pcre

假设文本如下:

some text \( {{my}} \) more text \(some\) text {{my}} more text
some text {{my}} more text some text {{my}} more text

该文字包含两种特殊模式:{{...}}\(...\){{...}}模式可以在文本中以\(...\)模式嵌套。

我的任务是编写一个regexp(在php中,所以PCRE引擎),它将匹配未嵌套在{{..}}模式中的所有\(...\)模式。因此,对于上面的示例文本,regexp应该只返回3个{{...}}模式,因为第一个模式嵌套在\(...\)中。

好吧,找到所有{{...}}的模式是/\{\{(?P<options>.*?)\}\}/g,我在这里有一个regex101小提琴:http://regex101.com/r/cQ1tQ4/1

是否可以创建一个如上所述的模式?

2 个答案:

答案 0 :(得分:0)

您可以通过PCRE动词(*SKIP)(*F)

执行此操作
\\\([^{}]*\{\{[^}]*\}\}[^\\]*\\\)(*SKIP)(*F)|\{\{(?P<options>[^}]*)\}\}

DEMO

答案 1 :(得分:0)

最简单的方法是匹配outer whatever outer | (inner)并获取捕获的组:

\\(.+?\\)|{{(.+?)}}

http://regex101.com/r/fX6sX8/3