捕获重复的组与在复杂正则表达式中间重复捕获组

  • 本文关键字:正则表达式 中间 复杂 regex pcre
  • 更新时间 :
  • 英文 :


第一:我知道这个问题已经被打死了。

第二:我查看了所有资源(在线编辑器,RexEgg,regular-expressions.info 等...在过去的几年里,我可以想到,但我仍然无法掌握正则表达式的这一部分。无论我使用什么正则表达式,它似乎都不适合我。

现在家政工作已经解决了:

我有大量的文本,我需要从中提取一些我认为正则表达式非常适合的数据。

文本如下所示:

2017-03-31 09:41:18 EDT [12708-4] 参数:$1 = '0', $2 = 'ON', $3 = 'ON'

很明显,我想要$1$2$3的值。这个特定示例有 3 个变量,但通常介于 1 和 15 之间。

我想要一个将捕获以下内容的正则表达式:

  1. $1
  2. '
  3. 0'
  4. $2
  5. "开">
  6. $3
  7. "开">

这是我的正则表达式,它与第一组匹配:

d{4}.+[[d-]*].+?parameters:s(($d+)s?=s?(['d+w+]+))

但是没有加号、括号和逗号的组合产生任何接近我想要的东西。即使我从字符串中删除逗号并将它们卡在一起,我也无法捕获它。

这家伙捕捉了一切,但这些组没有意义:

d{4}.+[[d-]*].+?parameters:s((($d+)s?=s?(['d+w+]+),?s?)+)

有人可以在这里结束我的痛苦并向我解释如果文本被我不关心的字符分隔,如何在正则表达式中捕获重复的文本吗?

我建议您使用正则表达式来提取每个值集,例如($d) = '(.+?)'示例

然后,您可以遍历所有匹配项。组 1 将是标签(即 $1),组 2 将是值(即 0)


我认为值得一提的一个小警告是:"重复的捕获组只会捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,请使用非捕获组"(如 regex101 中所述)

最新更新