10

C++ 11 の<regex>サポートを使用しており、文字列の先頭が正規表現と一致するかどうかを確認したいと考えています。[Boost に切り替えても問題ありませんが、基本的には同じという印象です。]

明らかに、式の実際のテキスト表現を制御できる場合は、^その先頭に a をアンカーとして貼り付けることができます。

しかし、regex(またはbasic_regex) オブジェクトしかない場合はどうなるでしょうか? アンカーを追加するために、それが表す正規表現を変更できますか? または、 を使用しregex_searchて結果を取得し、位置 0 から開始するかどうかを確認する必要がありますか?

4

1 に答える 1

12

std::regex_constants::match_continuousを使用するときにフラグを追加できますregex_search。たとえば、次のように「1」と「0」を出力します。

#include <regex>
#include <string>

int main()
{
    std::regex rx ("\\d+");

    printf("%d\n", std::regex_search("12345abc1234", rx,
                                     std::regex_constants::match_continuous));
    printf("%d\n", std::regex_search("abc12345", rx,
                                     std::regex_constants::match_continuous));
    return 0;
}

フラグの意味 (C++11 §28.5.2/1 = 表 139):

式は、 で始まるサブシーケンスにのみ一致しfirstます。

于 2012-08-08T18:20:09.257 に答える