正确使用regex_match

时间:2016-02-04 20:01:13

标签: c++ regex

我正在尝试以yyyy-mm-dd格式检查日期字符串的格式。我这样调用regex_match函数:

if (regex_match(date, regex("/\d{4}-\d{2}-\d{2}/")))

传入的字符串正是" 1997-03-26"当我使用正则表达式测试器时,它会选择正则表达式。

我认为这与regex_match以及我调用它的方式有关但我不知道它还需要什么。

2 个答案:

答案 0 :(得分:1)

这里不应该有正则表达式分隔符(包含该模式的那些/符号)。

此外,反斜杠必须在常规字符串文字中加倍,但是,当您使用正则表达式时,建议使用原始字符串文字(原始字符串文字通常由帮助形成) R"(然后)"封闭序列,其中()也可以替换为其他分隔符。)

所以,你可以使用

#include<regex>
#include <iostream>
using namespace std;

int main() {
    bool found = regex_match("1997-03-26",regex(R"(\d{4}-\d{2}-\d{2})"));
    cout<<(found?"found":"not found");
    return 0;
}

请参阅IDEONE demo

请注意regex_match需要完整的字符串匹配!否则,对于部分匹配,请使用regex_search

答案 1 :(得分:1)

你应该这样写:

"\\d{4}-\\d{2}-\\d{2}"

你需要双\\来逃避反斜杠。请记住,您必须在C ++中转义它,然后然后正则表达式。

此外,不需要/

希望这有帮助!