子模式定义
(?(DEFINE)
… )
构造允许你定义稍后可通过递归引用的子模式。当在模式中遇到它时将不会匹配。
该组应包含命名的子模式定义,只能通过递归访问它们。你可以这样定义语法:
(?x) # ignore pattern whitespace
(?(DEFINE)
(?<string> ".*?" )
(?<number> \d+ )
(?<value>
\s* (?:
(?&string)
| (?&number)
| (?&list)
) \s*
)
(?<list> \[ (?&value) (?: , (?&value) )* \] )
)
^(?&value)$
此模式将验证以下文本:
[42, "abc", ["foo", "bar"], 10]
请注意列表如何包含一个或多个值,值本身可以是列表。