【问题标题】:Regex not working as expected with C++ regex_match正则表达式无法与 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 不适用于子序列

标签: c++ regex c++11


【解决方案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(模式)匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    相关资源
    最近更新 更多