正则表达式与C ++ regex_match无法正常工作

时间:2015-06-29 07:53:15

标签: c++ regex c++11

我在c ++ 11中学习正则表达式,这个正则表达式搜索返回false。有谁知道我在做错了什么? 。我知道.*代表除换行符之外的任意数量的字符。

所以我期待regex_match()返回true,输出为"找到"。 然而,输出结果是"未找到"。

#include<regex>
#include<iostream>

using namespace std;

int main()
{
    bool found = regex_match("<html>",regex("h.*l"));// works for "<.*>"
    cout<<(found?"found":"not found");
    return 0;
}

1 个答案:

答案 0 :(得分:11)

您需要使用regex_search而不是regex_match

bool found = regex_search("<html>",regex("h.*l"));

请参阅IDEONE demo

简单来说,regex_search将在给定字符串中的任何位置搜索子字符串。 regex_match只有在整个输入字符串匹配时才会返回true(与Java中的matches行为相同)。

regex_match文档说:

  

返回目标序列是否与正则表达式rgx匹配   整个目标序列必须与此函数的正则表达式匹配&gt;返回true(即,在&gt;匹配之前或之后没有任何附加字符)。对于仅在匹配只是&gt;序列的一部分时返回true的函数,请参阅regex_search

regex_search不同:

  

返回目标序列(主题)中的某个子序列是否与正则表达式rgx(模式)匹配。