正则表达式匹配文本

问题描述:

的多个组,我不知道这是可能的正则表达式,但我想是这样......正则表达式匹配文本

输入:

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="([^"]+)" 

This w应该得到每个部分的第一个“a = abc ...”和“b = 123 ...”,但不能将“def ...”和其他部分分组。

正则表达式的味道是JMeter中的一种,我认为它是Perl。

任何建议或评论表示赞赏, :)

+0

对不起,忘了说,它是JMeter使用的那个。所以我相信这是Perl类型。 – Aion 2011-06-08 01:13:56

+0

如果为某个问题提供了正确或有用的答案,则习惯上将该答案标记为正确(正确答案旁边的绿色勾选复选标记)。请检查您的三个未解答的问题,并在适用的情况下选择适当的正确答案。 :) – 2011-06-08 02:03:51

+0

@Jared - fml,我认为点击向上箭头意味着它是正确的答案。对于那些回答我的问题的人非常抱歉。 – Aion 2011-06-08 02:16:35

这会满足您的需求?

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

你可以看到它here on Regexr

的组是在顺序,因为它们出现在输入

组1 = ABC1
第2组= DEF1
第3组= ghi1
组4 = 123a

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

+0

这很好。我没有说明这一点,但如果“a =”的数量是任意的,而“b =”的数量保持单一的话会怎样?例如,如果第一组有5个“a =”,第二组有4个“a =”。无论如何分组它,以便1“b =”组与X“a =”? – Aion 2011-06-09 02:38:45

+1

我不知道一个简单的解决方案,我只有一个复杂的小想法,不知道是否会工作。它没有问题匹配你想要的,你可以使用'(?:a =“([^”] +)“。*?)* b =”([^“] +)”',但因为在第一组之后的量词,总是只有第一组中的“a =”的最后匹配。你可以看到它[Regexr](http://regexr.com?2tv0q) – stema 2011-06-09 07:51:14