2016-02-04 107 views
0

我想检查日期字符串的格式为yyyy-mm-dd格式。我打电话了regex_match功能,像这样:正确使用regex_match

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

中所传递的字符串正是“1997年3月26日”当我使用正则表达式测试它拿起正则表达式。

我想这是与regex_match和我打电话给它的方式,但我不知道它还需要什么。

回答

1

你应该写这样的:

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

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

另外,不需要/

希望这会有所帮助!

+0

非常感谢! –

+0

没问题!如果这对您有用,请继续并将其标记为“接受的解决方案”。这样,任何有此问题的人都可以轻松找到答案:) @KyleJensen – Spencer4134

+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

+0

你能解释一下吗?我实现了这一点,它没有工作 –

+0

我提供了一个完整的演示。请检查并告诉我是否仍有不清楚的地方。 –

+0

对于响应缓慢,我很抱歉,我在笔记本电脑上,它很不方便。 –