【问题标题】:Using recursive regex to break a list使用递归正则表达式打破列表
【发布时间】:2017-11-08 13:57:18
【问题描述】:

我第一次尝试使用递归正则表达式来拆分列表中的项目,但我无法获得多个匹配项。

我有一个字符串,例如array(string,boolean)。我想从内部提取stringboolean,所以有这个正则表达式:

array\((?:([a-z]+)[,\S]*)(?:(?R)|\))

使用 regex101.com 进行测试时,我成功匹配 string,但不匹配 boolean。我试图移动一些括号,以防我的分组方式有误。

我想要一些关于我哪里出错的建议?还是我误解了递归正则表达式的工作原理?

帮助:https://regex101.com/r/Vkmvr0/2

【问题讨论】:

  • 你想要一个没有正则表达式的基于 php 的解决方案吗?
  • 使用单个正则表达式解析代码是不安全的。建议使用专用解析器。
  • PHP 解决方案很简单,这就是我现在正在做的事情(array\((.+?)\) 的一个小正则表达式,然后是一个爆炸,或者如果我想让拆分更广泛,则为 preg_split)。我刚刚度过这将是一个学习新东西的好时机。不过还是谢谢。
  • @WiktorStribiżew 你能扩展一下吗?为什么不安全?
  • 仅使用基于 () 的递归是不可能解析 array('string (', ')((( string') 的。

标签: php regex


【解决方案1】:

如果我猜对了,您可能会有另一种选择,可能是使用环视,例如使用类似于以下的表达式:

(?<=\(|,)[^\r\n,)]*(?=,|\))

如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2012-01-16
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多