正则表达式无法与 C++ regex_match 一起按预期工作
Posted
技术标签:
【中文标题】正则表达式无法与 C++ regex_match 一起按预期工作【英文标题】:Regex not working as expected with C++ regex_match 【发布时间】:2015-06-29 07:53:14 【问题描述】:我正在研究 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;
【问题讨论】:
您使用什么版本的编译器?部分版本的 gcc 支持 c++11 但不完全支持正则表达式 问题已得到解答 regex_match 不适用于子序列 【参考方案1】:您需要使用regex_search
而不是regex_match
:
bool found = regex_search("<html>",regex("h.*l"));
见IDEONE demo
简单来说,regex_search
将在给定字符串的 any 位置搜索子字符串。 regex_match
只会在 整个 输入字符串匹配时返回 true(与 Java 中的 matches
行为相同)。
regex_match 文档说:
返回目标序列是否匹配正则表达式
rgx
。 整个目标序列必须匹配此函数的正则表达式 > 才能返回 true(即,在 >match 之前或之后没有任何附加字符)。对于当匹配只是 > 序列的一部分时返回 true 的函数,请参阅regex_search
。
regex_search 不同:
返回目标序列(主题)中的某些子序列是否与正则表达式
rgx
(模式)匹配。
【讨论】:
以上是关于正则表达式无法与 C++ regex_match 一起按预期工作的主要内容,如果未能解决你的问题,请参考以下文章