0

我的简单正则表达式有一个错误。我一直在尝试使用 C++ 编写一些简单的正则表达式std::regex。到目前为止,这是我的代码。

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

int main(void)
{
    std::string str = "Hello world";
    std::regex rx("\w+\s\w+"), rx2("ello");
    std::cout << std::boolalpha << std::regex_match(str.begin(), str.end(), rx) << "\n";
    std::cout << std::boolalpha << std::regex_search(str.begin(), str.end(), rx2) << "\n";
    return 0;
}

该程序应打印(根据教程)

true
true

但它打印

false
false

我在哪里犯错?提前致谢。

注意:g++ -std=c++0x %file.cpp% -o %file%如果有帮助,我正在使用

4

1 回答 1

0

如前所述,g++(GCC)没有正确的正则表达式实现(它未实现但仍然可以编译)。

Boost 库有一个正则表达式实现,它几乎与 C++11 中的正则表达式完全兼容。您可以在代码中进行最少的更改(仅使用 boost:: 而不是 std::) 来使用它。

这是一个编译和工作的代码:

#include <iostream>
#include <boost/regex.hpp>
#include <string>

int main(void)
{
    std::string str = "Hello world";
    boost::regex rx("\\w+\\s\\w+"), rx2("ello");
    std::cout << std::boolalpha << boost::regex_match(str.begin(), str.end(), rx) << "\n";
    std::cout << std::boolalpha << boost::regex_search(str.begin(), str.end(), rx2) << "\n";
    return 0;
}

请注意,我还修复了 rx 的反斜杠缺少的转义,因为没有它就无法工作。

要编译它,您必须安装 libboost-regex-dev 包(如果不使用 Ubuntu/Debian,则安装类似的包)并执行以下命令:

g++ -std=c++0x main.cpp -lboost_regex -o test
于 2012-06-26T11:49:54.993 回答