正则表达式匹配除2个连续花括号之外的任何内容

shy*_*yam 3 php regex pcre

除了2个连续花括号({)之外,正则表达式匹配什么是什么?
一个示例字符串:
{{some text}} string I want {{another set {{and inner}} }}
我只想获得string i want.

使用堆栈来做这些事情已经超出了我的想法,但我想知道是否可以使用正则表达式来完成.
我正在使用PHP的PCRE

提前感谢

Joh*_*ica 6

使用先行断言(?!{{|}})来验证外部集合中没有嵌套的大括号.

{{((?!{{|}}).)*}}
Run Code Online (Sandbox Code Playgroud)

测试程序

<?php
$string = '{{lot {{of}} characters}}';

for (;;)
{
    var_dump($string);
    $replacement = preg_replace('/{{((?!{{|}}).)*}}/', '', $string);

    if ($string == $replacement)
        break;

    $string = $replacement;
}
Run Code Online (Sandbox Code Playgroud)

产量

string(25) "{{lot {{of}} characters}}"
string(19) "{{lot  characters}}"
string(0) ""
Run Code Online (Sandbox Code Playgroud)

它似乎也合理地处理了各种边缘情况:

# Unbalanced braces.
string(23) "{{lot {{of}} characters"
string(17) "{{lot  characters"

string(23) "lot {{of}} characters}}"
string(17) "lot  characters}}"

# Multiple sets of braces.
string(25) "{{lot }}of{{ characters}}"
string(2) "of"

# Lone curlies.
string(41) "{{lot {{of {single curly} }} characters}}"
string(19) "{{lot  characters}}"
string(0) ""
Run Code Online (Sandbox Code Playgroud)