我有一个很大的麻烦,允许这个正则表达式:
{{{ hello{{there}} }}}
我的问题主要是区分双括号和三括号,因为符号使用braket ......我试过了
\{{2} /*Accept only two brakets --- Does NOT work*/
允许2个制动器,但它根本不起作用。
正则表达专家可以告诉我一招吗?提前致谢
答案 0 :(得分:3)
要区分三重和双重大括号,您需要使用 lookarounds 。
要仅匹配双开口大括号,请使用
(?<!{){{2}(?!{)
此处,(?<!{)
是一个负面的背后隐藏,确保在第一个{
和{
之前没有(?!{)
否定前瞻确保在第二个{
之后没有{
。请参阅regex demo here。
要仅匹配三个开口大括号,请使用
(?<!{){{3}(?!{)
只需在上述所有表达式中使用}
即可匹配结束括号。
请注意,在PHP正则表达式中无需转义{
和}
,引擎足够聪明,知道它们不属于限制量词。
要获取{{{
和}}}
之间的所有子字符串,您可以使用
'~(?<!{){{{(?!{)\s*(.*?)\s*(?<!})}}}(?!})~s'
请参阅3rd regex demo。 PHP code:
$re = '~(?<!{){{{(?!{)\s*(.*?)\s*(?<!})}}}(?!})~s';
$str = "{{{ hello{{there}} }}} {{{good {{morning}} }}}";
preg_match_all($re, $str, $matches);
print_r($matches[1]);
输出:
[0] => hello{{there}}
[1] => good {{morning}}
另请注意,如果您没有四倍{
和}
s,则可以省略外观并使用'~{{{\s*(.*?)\s*}}}~s'
。