我在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;
}
答案 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
(模式)匹配。