【发布时间】:2017-11-08 13:57:18
【问题描述】:
我第一次尝试使用递归正则表达式来拆分列表中的项目,但我无法获得多个匹配项。
我有一个字符串,例如array(string,boolean)。我想从内部提取string 和boolean,所以有这个正则表达式:
array\((?:([a-z]+)[,\S]*)(?:(?R)|\))
使用 regex101.com 进行测试时,我成功匹配 string,但不匹配 boolean。我试图移动一些括号,以防我的分组方式有误。
我想要一些关于我哪里出错的建议?还是我误解了递归正则表达式的工作原理?
【问题讨论】:
-
你想要一个没有正则表达式的基于 php 的解决方案吗?
-
使用单个正则表达式解析代码是不安全的。建议使用专用解析器。
-
PHP 解决方案很简单,这就是我现在正在做的事情(
array\((.+?)\)的一个小正则表达式,然后是一个爆炸,或者如果我想让拆分更广泛,则为 preg_split)。我刚刚度过这将是一个学习新东西的好时机。不过还是谢谢。 -
@WiktorStribiżew 你能扩展一下吗?为什么不安全?
-
仅使用基于
(和)的递归是不可能解析array('string (', ')((( string')的。