正则表达式无法与 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 一起按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中对多个正则表达式使用正则表达式“分组”?

正则表达式

正则表达式

在 Redshift 中使用 regex_match 的问题

正则表达式

使用 or 匹配正则表达式