PHP preg_match双括号内的三括号

时间:2019-03-16 15:25:49

标签: php regex

我正在尝试编写正则表达式以在双括号之间找到一个字符串,但是如果找到三括号则停止。

有人可以帮助我吗?

{{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'

编辑:

对不起,我忘了说我需要换行

谢谢!

3 个答案:

答案 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'

谢谢你们