【发布时间】:2011-03-09 04:48:24
【问题描述】:
我正在尝试使用正则表达式解析输入字符串。尝试捕获重复组时遇到问题。我似乎总是匹配该组的最后一个实例。我曾尝试使用不情愿(非贪婪)量词,但我似乎遗漏了一些东西。有人可以帮忙吗?
正则表达式尝试:
(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).
C++代码sn-p:
std::string::const_iterator start = str.begin(), end = str.end();
while(regex_search(start,end,what,expr))
{
cout << what[0];
cout << what[1];
...
start += what.position () + what.length ();
}
这个循环只执行一次,而我希望它在这个例子中运行 3 次。任何帮助将不胜感激。
【问题讨论】:
-
如果您能告诉我们更多有关输入格式以及您希望如何解析它的信息,将会很有帮助。
-
输入是字符串流,在这个例子中,我希望得到 3 个组(BEN KL)、(LHR BA)和(MAN QFL)。我知道在这种情况下,即使不使用正则表达式我们也可以做到这一点,但我只是想看看我是否可以使其与使用正则表达式的现有代码保持一致。
标签: c++ regex boost-regex