子模式定義
(?(DEFINE)
… )
構造允許你定義稍後可通過遞迴引用的子模式。當在模式中遇到它時將不會匹配。
該組應包含命名的子模式定義,只能通過遞迴訪問它們。你可以這樣定義語法:
(?x) # ignore pattern whitespace
(?(DEFINE)
(?<string> ".*?" )
(?<number> \d+ )
(?<value>
\s* (?:
(?&string)
| (?&number)
| (?&list)
) \s*
)
(?<list> \[ (?&value) (?: , (?&value) )* \] )
)
^(?&value)$
此模式將驗證以下文字:
[42, "abc", ["foo", "bar"], 10]
請注意列表如何包含一個或多個值,值本身可以是列表。