除了2个连续花括号({)之外,正则表达式匹配什么是什么?
一个示例字符串:
{{some text}} string I want {{another set {{and inner}} }}
我只想获得string i want.
使用堆栈来做这些事情已经超出了我的想法,但我想知道是否可以使用正则表达式来完成.
我正在使用PHP的PCRE
提前感谢
使用先行断言(?!{{|}})来验证外部集合中没有嵌套的大括号.
{{((?!{{|}}).)*}}
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)