这个PHP正则表达式模式意味着什么



有人能解释一下这个正则表达式中每个字符的含义吗:

...preg_match('/{loop(?: name){0,1}=${0,1}(.*?)}/', $html, $code)...

Regex free spacing'x'mode注释拯救!

$re = '/
  {         # Match a literal "{".
  loop       # Match the literal text: "loop".
  (?:        # Begin non-capture group to
    [ ]name  # match the literal text: " name"
  ){0,1}     # from zero to one times.
  =          # Match a literal "=".
  ${0,1}    # match literal "$" from zero to one times.
  (.*?)      # Capture in group $1 zero or more non-"n".
  }         # Match a literal "}".
  /x';

这看起来可能是模板解析器的一部分。

{loop(?: name){0,1}=${0,1}(.*?)}
--------------------

匹配{loop name{loop?:告诉解析器不要将该子模式放在匹配数组中。{0,1}标记它可以出现零次或一次。

{loop(?: name){0,1}=${0,1}(.*?)}
                    ---------------

匹配等号,然后是可选的美元符号($(,然后是一些文本,很可能是变量名,最后是}

{0,1}的实例本可以用? 替换

/-RegExp的开始

{-匹配一个{字符。=>[{]

loop-匹配单词"loop"=>[{loop]

?:-不包括在匹配数组中=>[{loop]

(*)-将多个令牌分组在一起。这允许您将量词应用于整个组。这将创建一个捕获组

name-匹配单词"name"=>{loop(name)

{0,1}-将上一个正则表达式0与1进行匹配

=$-匹配"=$"。=>{loop(name)=$

{0,1}-将上一个正则表达式0与1进行匹配

(.*?)-.=任意单词字符。*?匹配0个或多个上一个令牌。=>{loop(name)=$anything

}-匹配一个}字符。=>{loop(name)=$anything}

/-RegExp结束。

最新更新