oms*_*nti 5 c++ regex boost-regex
我试图使用正则表达式解析输入字符串.在尝试捕获重复组时遇到问题.我似乎总是匹配该组的最后一个实例.我尝试过使用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
Run Code Online (Sandbox Code Playgroud)
输入字符串:
OS BENKL/LHRBA/MANQFL\r\n
Run Code Online (Sandbox Code Playgroud)
我似乎总是得到最后一组是MANQFL组(MAN QFL),我的目标是获得所有三组(可以有1-5组):
(BEN KL) , (LHR BA) and (MAN QFL).
Run Code Online (Sandbox Code Playgroud)
C++代码段:
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 ();
}
Run Code Online (Sandbox Code Playgroud)
这个循环只有一次,而我希望它在这个例子中运行3次.任何帮助都感激不尽.
从 boost::regex 中获取多个匹配项的最佳方法是使用 regex_iterators。这个例子应该做你想要的。
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main() {
std::string a = "OS BENKL/LHRBA/MANQFL\r\n";
const boost::regex re("[A-Z]{3}[A-Z]*");
boost::sregex_iterator res(a.begin(),a.end(),re);
boost::sregex_iterator end;
for (; res != end; ++res)
std::cout << (*res)[0] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为:当捕获组由量词控制时,每次重复都会覆盖上一次捕获的任何内容。获取所有匹配项的最简单方法是在整个事物周围放置一个捕获组,如下所示:
(OS)\\s(((\\w{3})(([A-Za-z0-9]{2})|(\\w{3})(\\w{3}))\\/?){1,5})\\r
Run Code Online (Sandbox Code Playgroud)
该组最终将包含BENKL/LHRBA/MANQFL,您可以在 上拆分它/。
| 归档时间: |
|
| 查看次数: |
3314 次 |
| 最近记录: |