C ++ 11正则表达式:检查字符串是否以正则表达式开头

时间:2012-08-08 18:01:24

标签: c++ regex boost c++11 boost-regex

我正在使用C ++ 11的<regex>支持,并想检查字符串的开头是否与正则表达式匹配。 [如果有帮助,我可以切换到Boost,但我的印象是它们基本相同。]

显然,如果我能控制表达式的实际文本表示,我可以在其开头添加^作为锚点。

但是,如果我只有regex(或basic_regex)对象怎么办?我可以修改它代表的正则表达式来添加锚吗?或者我是否必须使用regex_search,获取结果,并检查它是否从位置0开始?

1 个答案:

答案 0 :(得分:10)

您可以在使用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开始的子序列。