0

単純な REGEX にバグがあります。を使用して 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 の正規表現とほぼ完全に互換性のある正規表現の実装があります。コードに最小限の変更を加えるだけでそれを使用できます(std::の代わりにboost::を使用するだけです)。

コンパイルして動作するコードは次のとおりです。

#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 に答える