子模式定义

(?(DEFINE)) 构造允许你定义稍后可通过递归引用的子模式。当在模式中遇到它时将不会匹配。

该组应包含命名的子模式定义,只能通过递归访问它们。你可以这样定义语法:

(?x) # ignore pattern whitespace
(?(DEFINE)
  (?<string> ".*?" )
  (?<number> \d+ )
  (?<value>
    \s* (?:
        (?&string)
      | (?&number)
      | (?&list)
    ) \s*
  )
  (?<list> \[ (?&value) (?: , (?&value) )* \] )
)
^(?&value)$

此模式将验证以下文本:

[42, "abc", ["foo", "bar"], 10]

请注意列表如何包含一个或多个值,值本身可以是列表。