我正在尝试编写正则表达式以在双括号之间找到一个字符串,但是如果找到三括号则停止。
有人可以帮助我吗?
{{prefix this is
an {{{example}}}
and can't stop
on example word.}}
{{anoter_prefix another
double braces and I
have to find both}}
正则表达式:
'/\{\{prefix(.*)?\}\}/sU'
编辑:
对不起,我忘了说我需要换行
谢谢!
答案 0 :(得分:0)
确保双括号定界符{{
-}}
很简单。
然后将其注入递归中。
(?<!{){(?!{{)({(?:[^{}]++|(?1))*})}
https://regex101.com/r/lSEvCX/1
格式化代码:
(?<! { ) # Not a brace behind
{ # Open Brace ( 1st of double )
(?! {{ ) # Tripple open not allowed
( # (1 start), recursion function
{ # Open Brace ( 2nd of double )
(?:
[^{}]++ # Not braces, possesive
| # or,
(?1) # Recurse a single open/close brace pair
)*
} # Close Brace ( closure)
) # (1 end), recursion
} # Close Brace
答案 1 :(得分:0)
您可能使用的正则表达式将匹配{{
且之前没有{
,然后匹配prefix
,然后匹配{
和{{1 }}或单个}
/ {
或3个或更多}
或{
s,最多}
子字符串,后面不跟}}
:
}
请参见regex demo
详细信息
'~(?<!{){{prefix(?:[^{}]|(?<!})}(?:}{2,})?|(?<!{){(?:{{2,})?)*(?<!})}}(?!})~'
-向后看是负数,不需要立即(?<!{)
到当前位置的左侧{
-文字子字符串{{prefix
-零次或多次重复:
(?:[^{}]|(?<!})}(?:}{2,})?|(?<!{){(?:{{2,})?)*
-除[^{}]
和{
}
-或|
-(?<!})}(?:}{2,})?
之前没有}
,并且可以选择后面跟随2个或更多}
字符}
-或|
-(?<!{){(?:{{2,})?
之前没有{
,并且可以选择后面跟随2个或更多{
字符{
-当前位置左侧不允许(?<!})
}
-一个}}
子字符串... }}
-...紧跟着(?!})
。答案 2 :(得分:-1)
如果其他人正在寻找我所需要的东西,维克多给了我们帮助。
'~(?<!{){{prefix(?:[^{}]|(?<!})}(?:}{2,})?|(?<!{){(?:{{2,})?)*}}(?!})~s'
谢谢你们