PCRE中的递归正则表达式和组搜索

时间:2015-03-27 01:03:04

标签: php regex recursion pcre

我有一个这种形式的路由系统:website/(:option)(:option)(:option(:option))website/archive(/:year(/:month(-:day))) (/page/:page)( )表示可选路径,:string表示将被替换的变量。在嵌套括号的情况下,我需要继续所有变量(可能有无限个括号)。

我在PHP中使用PCRE。我需要选择所有(:string),所以我想到了这个正则表达式:\([^\(\)]*:[^\(\)]+\)。我遇到了递归和组正则表达式搜索的问题。

示例:website/archive(/2015(/:month(:day)))将选择(/:month(:day))
示例:website/archive(/:year(/03(27)))将选择(/:year(/03(27)))

Regexr

有人可以向我解释递归是如何工作的,甚至是否可以这样做?

1 个答案:

答案 0 :(得分:0)

尝试这种模式

(\((?:[^()]|(?R))*\))

Demo


阅读下面的评论后,使用此模式,检查子模式#1

\(([^():\r\n]*:[^()]+(\((?:[^()]|(?2))*\))\))

Demo
如果它不是多行输入,您可以删除\r\n