子模式定義

(?(DEFINE)) 構造允許你定義稍後可通過遞迴引用的子模式。當在模式中遇到它時將不會匹配。

該組應包含命名的子模式定義,只能通過遞迴訪問它們。你可以這樣定義語法:

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

此模式將驗證以下文字:

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

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