C++ std::正则表达式 查找多个匹配项
C++ std::regex Regular Expressions Finding multiple matches
我正在尝试解析 c++ 中的证书,并决定这是学习正则表达式的好机会。我大约一个小时前才了解正则表达式,所以请原谅我缺乏知识。
我正在寻找与条目关联的所有 OU。
我正在执行以下操作:
std::smatch OuMatches;
std::string myCertSubject = "O="My Company, Incorporated", OU=Technician Level - A3, OU=Access Level - 1, CN="Name, My", E=namem@company.com";
std::regex subjectRx("OU=[[:w:]|[:s:]|[:digit:]|-]*", std::regex_constants::icase);
bool foundOU = std::regex_search(mySubject,OuMatches,subjectRx);
为什么这不能给我与我的注册前任匹配的所有结果 (2)?有没有办法得到这个?
看起来您只是想获取一个看起来像OU=XXXXXXXXXXXXXXXXX
后跟逗号或分号的字符串。
这个正则表达式将做到这一点:
OU=[^,;]+
这意味着字符串 OU=
,后跟至少一个不是逗号或分号的字符:
[^,;]+
下面是使用此正则表达式打印匹配项的代码示例(基于此处的示例):
std::smatch OuMatches;
std::string myCertSubject = "O="My Company, Incorporated", OU=Technician Level - A3, OU=Access Level - 1, CN="Name, My", E=namem@company.com";
std::regex subjectRx("OU=[^,;]+", std::regex_constants::icase);
std::regex_iterator<std::string::iterator> it (myCertSubject.begin(), myCertSubject.end(), subjectRx);
std::regex_iterator<std::string::iterator> end;
while (it != end)
{
std::cout << it->str() << std::endl;
++it;
}
尝试改用否定字符类。我感觉你的角色类并不像你想象的那样......
subjectRx("OU=[^,]*", std::regex_constants::icase);
[^,]*
将匹配除逗号之外的所有字符。
至于比赛,请尝试使用循环:
while (std::regex_search (mySubject,OuMatches,subjectRx)) {
// do something
}
我不知道C++,但我发现这个文档页面,我认为应该更有用一些。
它在这里的代码段是
while (std::regex_search (s,m,e)) {
for (auto x:m) std::cout << x << " ";
std::cout << std::endl;
s = m.suffix().str();
}
编辑:我只是意识到您可以在参数中使用逗号,例如在O=
中,这不适用于[^,]
。相反,您可以使用此正则表达式:
OU=(?:[^,]|,(?!(?:[^"]*"[^"]*"[^"]*)*$))*
您可以在此处查看O=
示例。
相关文章:
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 查找 std::vector 中的最小值和最大值 std::p air
- 使用 std::累加来查找数组的总和
- std::max_element正在查找->操作员
- std::使用迭代器映射查找距离,程序不会终止
- 在 std::set 中查找 std::vector 的元素
- C++11 (MSVS2012) 正则表达式在多行 std::string 中查找文件名
- 查找 std::integer_sequence 中首次出现的值的位置
- 通过与不同类型的值进行自定义比较来查找 std::set 的元素
- 使用 lambda 函数查找 std::unordered_map 中的最小值
- 范围运算符需要查找 std 命名空间而不是提升
- 使用 std::find 在 std::vector 中查找 std::tuple
- (C++)如何从特定(结束)点查找 std::string 中的最后一个字符
- 查找 std::set 中的键成对存储
- 查找std::set中的元素
- 查找std::vector中满足条件的最后一个元素
- 如何查找 std::string 数组的长度
- 查找std::wstring的长度
- 查找std::string中非空白的第一个字符
- 从std::vector中查找std::map中的对象