PHP Regex,捕获重复匹配

亚历克·蒂尔(Alec Teal)

这是一个非常人为的示例,但是我一直在搜索“ regex捕获重复匹配”之类的东西,但是没有运气。

如何使用preg_match_all()获取所有子组匹配的捕获信息?是我最近的。

这不是我的例子,这是我的问题。

我有以下形式的标签:

 name>>thing1(d1),thing2(d2),thing3(d3)::otherName

我想提取name,以及things的数据(最多一个参数),最后提取一位,otherName

执行此操作的规则可能类似于:

^([a-z]+)>>(([a-z]+\([a-z]+\)(,[a-z]+\([a-z]+\))*)?::([a-zA-Z]]+)$

(此规则实际上不起作用,我丢失了数字,但是您应该对表格有所了解)

如您所见,我实际上在这里匹配我的模式,我想用 *

如果自编辑后不清楚

我没有麻烦匹配我的标签。我想一步提取标签的所有部分。所以我想要一个像这样的数组:

 Array(`name`,Array(`thing1`,`d1`),Array(Array(`thing2`,`d2`),
 Array(`thing3`,`d3`)),`otherName`)

我确实有一个后备

我想用一种表达方式做到这一点,因为我认为没有技术原因无法做到这一点。但是作为一个“B计划”我可以只提取块之间>>以及::与使用preg_match_all-我提出这个问题,因为业绩是在我的脑海里,我的规则已经着眼于信息,我只是捕捉到它。所以我不会说这是过早的优化。

亚历克·蒂尔(Alec Teal)

因此,正如评论中所讨论的(为了阻止人们发布与文本匹配的规则(严重,请阅读Q)),我将在此处发布“解决方案”。

我使用以下规则:

^([a-z]+)>>(.*)::([a-z]+)$

(或类似的东西)

然后,我可以preg_match_all在中间捕获中使用这种方式提取数据。令人讨厌的是,这不检查逗号。但是我可以取消该要求。

所以像这样:

 preg_match_all("([a-z]+)\(([a-z]+)\)",...

在那。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章