正则表达式匹配文本
的多个组,我不知道这是可能的正则表达式,但我想是这样......正则表达式匹配文本
输入:
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。
任何建议或评论表示赞赏, :)
这会满足您的需求?
(?: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 =”? – Aion 2011-06-09 02:38:45
我不知道一个简单的解决方案,我只有一个复杂的小想法,不知道是否会工作。它没有问题匹配你想要的,你可以使用'(?:a =“([^”] +)“。*?)* b =”([^“] +)”',但因为在第一组之后的量词,总是只有第一组中的“a =”的最后匹配。你可以看到它[Regexr](http://regexr.com?2tv0q) – stema 2011-06-09 07:51:14
对不起,忘了说,它是JMeter使用的那个。所以我相信这是Perl类型。 – Aion 2011-06-08 01:13:56
如果为某个问题提供了正确或有用的答案,则习惯上将该答案标记为正确(正确答案旁边的绿色勾选复选标记)。请检查您的三个未解答的问题,并在适用的情况下选择适当的正确答案。 :) – 2011-06-08 02:03:51
@Jared - fml,我认为点击向上箭头意味着它是正确的答案。对于那些回答我的问题的人非常抱歉。 – Aion 2011-06-08 02:16:35