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

10

我正在使用 C++ 11 的 <regex> 支持,想要检查一个字符串是否以正则表达式匹配。[如果有必要,我可以转用 Boost,但我的印象是它们基本相同]

显然,如果我能够控制正则表达式的文本表示,我只需在开头加入锚点 ^

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


许多普通的字符串可以被视为正则表达式。"abc"也是一个正则表达式,但只匹配完全相同的字符串。 - nhahtdh
1个回答

12

使用regex_search时,您可以添加std::regex_constants::match_continuous标志。例如,以下代码会打印出"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开始的一个子序列。


4
那是一个,呃,有趣的旗帜名称,但那正是我想要的!非常感谢。 - EvanED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接