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

rah*_*agi 7 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;
}
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 11

你需要使用regex_search而不是regex_match:

bool found = regex_search("<html>",regex("h.*l"));
Run Code Online (Sandbox Code Playgroud)

请参阅IDEONE演示

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

regex_match文档说:

返回目标序列是否与正则表达式匹配rgx.
整个目标序列必须与此函数的正则表达式匹配>才能返回true(即,在>匹配之前或之后没有任何其他字符).对于当匹配仅是>序列的一部分时返回true的函数,请参阅regex_search.

regex_search是不同的:

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