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

时间:2017-03-31 19:32:07

标签: regex pcre

首先:I know this question has been beaten to death.

第二:我看过每一种资源(在线编辑,RexEggregular-expressions.info等......)我可以想到过去几年,我仍然无法掌握这部分正则表达式。无论我使用何种RegEx,它似乎都不适用于我。

现在家务管理不在了:

我需要大量的文本来提取一些数据,我认为Regex非常适合。

文字如下:

  

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

显然,我想要$1$2$3的值。这个特殊的例子有3个变量,但通常在1到15之间。

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

  1. $ 1
  2. '0'
  3. $ 2
  4. 'ON'
  5. $ 3'/ LI>
  6. 'ON'
  7. 这是我的正则表达式,与第一组匹配:

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

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

    这家伙抓住了一切,但这些团体没有意义:

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

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

1 个答案:

答案 0 :(得分:0)

我建议您使用re rex来提取每个值集(\$\d) = '(.+?)' example

然后你可以遍历所有比赛。第1组将是标签(即$ 1),第2组将是值(即0)


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

相关问题