首页 >后端开发 >C++ >如何使用 C 的 `std::regex` 高效匹配字符串中的多个单词?

如何使用 C 的 `std::regex` 高效匹配字符串中的多个单词?

DDD
DDD原创
2024-11-29 12:51:11322浏览

How Can I Efficiently Match Multiple Words in a String Using C  's `std::regex`?

使用 std::regex 匹配多个结果

使用正则表达式匹配字符串中多次出现的单词可能具有挑战性。尽管表达式“(bS*b){0,}”似乎匹配字符串中的所有连续单词,但它可能不会产生所需的输出。相反,建议采用迭代方法。

以下是修改后的代码:

#include <iostream>
#include <string>
#include <regex>

int main() {
    regex exp("(\b\S*\b)");
    smatch res;
    string str = "first second third forth";

    string::const_iterator searchStart(str.cbegin());
    while (regex_search(searchStart, str.cend(), res, exp)) {
        cout << (searchStart == str.cbegin() ? "" : " ") << res[0];
        searchStart = res.suffix().first;
    }
    cout << endl;

    return 0;
}

在此更新的代码中,我们在执行正则表达式搜索时使用 while 循环来迭代字符串。循环首先将 searchStart 迭代器设置为字符串的开头。然后,在每次迭代中:

  1. regex_search 函数在从 searchStart 开始的子字符串中搜索该模式的第一次出现。
  2. 如果找到匹配项,我们将打印匹配的单词.
  3. 我们更新 searchStart 迭代器以在匹配后开始搜索word.

通过迭代字符串直到找不到更多匹配项,我们可以一一输出所有单词。

以上是如何使用 C 的 `std::regex` 高效匹配字符串中的多个单词?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn