正则表达式捕获重复的组

时间:2010-06-28 14:18:37

标签: c++ regex boost

我正在尝试使用正则表达式解析输入字符串。在尝试捕获重复组时遇到问题。我似乎总是匹配该组的最后一个实例。我尝试过使用Reluctant(非贪心)量词,但我似乎缺少一些东西。有人可以帮忙吗?

尝试使用正则表达式:

(OS)\\s((\\w{3})(([A-Za-z0-9]{2})|(\\w{3})(\\w{3}))\\/{0,1}){1,5}?\\r

(OS)\\s((\\w{3}?)(([A-Za-z0-9]{2}?)|(\\w{3}?)(\\w{3}?))\\/{0,1}?){1,5}?\\r

输入字符串:

OS BENKL/LHRBA/MANQFL\r\n

我似乎总是抓住最后一组是MANQFL组(MAN QFL),我的目标是获得所有三组(可以有1-5组):

(BEN KL) , (LHR BA) and (MAN QFL). 

Anyhelp将不胜感激。

1 个答案:

答案 0 :(得分:3)

当您在正则表达式中重复捕获组时,捕获组仅存储与其上一次迭代匹配的文本。如果需要捕获多次迭代,则需要使用多个正则表达式。 (.NET是唯一的例外。它的CaptureCollection提供捕获组的所有迭代的匹配。