Php PCRE中的递归正则表达式和组搜索
我有一个这样的路由系统:website/:option:option:option或 网站/档案/:年/:月-:日/页/:页。表示可选路径;字符串表示将被替换的变量。在嵌套括号的情况下,我需要所有变量才能继续,因为括号的数量可能是无限的 我在PHP中使用PCRE。我需要选择所有:字符串,所以我考虑了这个正则表达式:\[^\\]*:[^\\]+\。我遇到递归和组正则表达式搜索的问题 示例:website/archive/2015/:month:day将选择/:month:day 示例:网站/archive/:year/0327将选择/:year/0327 有人能给我解释一下递归是如何工作的吗?如果可以的话?试试这个模式Php PCRE中的递归正则表达式和组搜索,php,regex,recursion,pcre,Php,Regex,Recursion,Pcre,我有一个这样的路由系统:website/:option:option:option或 网站/档案/:年/:月-:日/页/:页。表示可选路径;字符串表示将被替换的变量。在嵌套括号的情况下,我需要所有变量才能继续,因为括号的数量可能是无限的 我在PHP中使用PCRE。我需要选择所有:字符串,所以我考虑了这个正则表达式:\[^\\]*:[^\\]+\。我遇到递归和组正则表达式搜索的问题 示例:website/archive/2015/:month:day将选择/:month:day 示例:网站/arc
(\((?:[^()]|(?R))*\))
阅读下面的注释后,使用此模式,对照子模式1进行检查
\(([^():\r\n]*:[^()]+(\((?:[^()]|(?2))*\))\))
如果不是多行输入,您可以删除\r\n,有人能向我解释递归是如何工作的吗?递归比平均值要复杂,某种解释可能比发布原始模式更好。顺便说一句,你可以用\?:[^]++| R*\来优化它。这个模式的问题是,他还捕获了一个不包含:字符的字符串。举个例子:website/archive/2015/:month:day:年已设置,因此不需要捕获它,但未设置月,因此捕获将为/:month:day,如果设置了天而不是年:website/archive/:year/:month27,则捕获将保持为/:year/:month27。这就像嵌套的IF条件,如果第一个条件不满足,那么下一个条件就无法满足。@Fox,更新了我上面的答案!还有一些模式是正则表达式无法选择的:但现在他做了我想要的。所以问题已经解决了。谢谢