【问题标题】:Regex to match multiple groups of text正则表达式匹配多组文本
【发布时间】:2025-12-29 04:40:11
【问题描述】:

我不确定这在 Regex 中是否可行,但我想要类似...

输入:

a="abc1"
...some stuff...
a="def1"
...some stuff...
a="ghi1"
...some stuff...
b="123a"
...some stuff...
a="abc2"
...some stuff...
a="def2"
...some stuff...
a="ghi2"
...some stuff...
b="123b"
...some stuff...
a="abc3"
...some stuff...
a="def3"
...some stuff...
a="ghi3"
...some stuff...
b="123c"
...some stuff...

想要:

match_1 = 123a
match_1_1 = abc1
match_1_2 = def1
match_1_3 = ghi1

match_2 = 123b
match_2_1 = abc2
match_2_2 = def2
etc.

尝试:

a="([^"]+)"[\D\W\S]+b="([^"]+)"

这将获得每个部分的第一个“a=abc...”和“b=123...”,但不会对“def...”及其他部分进行分组。

正则表达式的风格是 JMeter 中的风格,我相信是 Perl。

感谢任何建议或评论, :)

【问题讨论】:

  • 对不起,忘了说,是JMeter用的那个。所以我相信它是 Perl 类型。
  • 当为某个问题提供了正确或有用的答案时,通常会将该答案标记为正确(正确答案旁边的绿色勾边复选标记)。请检查您的三个未回答的问题,并在适用的情况下选择适当的正确答案。 :)
  • @Jared - fml,我认为单击向上箭头意味着它是正确的答案。非常抱歉那些回答我问题的人。
  • 没问题;许多新用户没有意识到复选标记的实用性。我可以告诉你,也很感谢你的支持。我通常会投票给所有好的答案,然后选择一个我认为最合适的答案(有时这很困难,所以我只需要选择一个)。

标签: regex perl jmeter


【解决方案1】:

这符合您的需要吗?

(?:a="([^"]+)".*?)(?:a="([^"]+)".*?)(?:a="([^"]+)".*?)b="([^"]+)"

你可以看到here on Regexr

组的顺序与它们在输入中出现的顺序相同

第 1 组 = abc1
第 2 组 = def1
第 3 组 = ghi1
第 4 组 = 123a

您需要打开 \s (dotall) 修饰符,以便 . 匹配换行符。 (?:) 是非捕获组。

【讨论】:

  • 这很好。我没有说明这一点,但是如果“a=”的数量是任意的,而“b=”的数量保持不变怎么办?例如,如果第一组有 5 个“a=”,第二组有 4 个“a=”。无论如何要分组它,以便 1 "b=" 与 X "a=" 分组?
  • 我不知道一个简单的解决方案,我对一个复杂的解决方案只有一个小想法,不知道这是否可行。匹配你想要的没有问题,你可以使用(?:a="([^"]+)".*?)*b="([^"]+)",但由于第一组之后的量词,总是只有第一组中“a =”的最后一个匹配。可以看here on Regexr
最近更新 更多