Ubuntu C++如何使用正则表达式

作者:技术拾光时间:2026-07-12 08:13:07浏览:74

在Ubuntu系统中,C++使用正则表达式只需包含头文件,通过std::sregex_iterator迭代器遍历所有匹配结果,示例代码展示了如何高效匹配文本中的单词对,方法简洁且支持C++11及以上标准,适用于文本处理场景。

Ubuntu C++正则表达式入门:核心步骤与代码示例

在Ubuntu系统上用C++编写正则表达式,流程比想象中更简洁。核心操作仅需两步:包含必要的头文件,然后调用对应的迭代器或函数。以下代码展示了标准的入门用法,阅读后即可快速上手。

Ubuntu C++如何使用正则表达式

#include 
#include 
#include 

int main() {
    // 要匹配的文本
    std::string text = "Hello, my name is John Doe and I am 30 years old.";

    // 正则表达式模式
    std::regex pattern(R"((\w+)\s(\w+))"); // 匹配两个单词,中间有一个空格

    // 使用std::sregex_iterator进行迭代匹配
    auto words_begin = std::sregex_iterator(text.begin(), text.end(), pattern);
    auto words_end = std::sregex_iterator();

    std::cout << "Found " << std::distance(words_begin, words_end) << " words:" << std::endl;

    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;
        std::string match_str = match.str();
        std::cout << match_str << std::endl;
    }

    return 0;
}

这段代码使用了std::sregex_iterator,它会遍历文本中所有匹配的子串。正则表达式模式((\w+)\s(\w+))用于匹配“单词+空格+单词”的连续对。编译过程也很简单,在终端中执行:

g++ -o regex_example regex_example.cpp

然后运行:

./regex_example

输出结果如下:

Found 4 words:
Hello my
my name
name is
is John
John Doe
Doe and
and I
I am
am 30
30 years
years old

输出解读与模式调整提示

这里包含一个需要注意的细节——输出内容比预期更多。原因是该模式匹配连续的两个单词,而文本中存在大量相邻单词对,因此迭代器输出了所有相邻组合。如果需要匹配特定格式,例如“名字+年龄”,需要调整正则表达式。核心思路是:先定义std::regex对象,再通过迭代器或std::regex_match / std::regex_search完成匹配操作。后续只需根据实际需求修改模式即可。