【问题标题】:How to disable metacharacters within regex?如何禁用正则表达式中的元字符?
【发布时间】:2016-06-14 16:20:36
【问题描述】:

在 Perl 中,我们可以做到这一点

$str =~ /\d{3}\Q(a.o.e).u.i.y\E\w+/;

\Q\E 之间,(a.o.e).u.i.y 是一个文字字符串,其中所有元字符(如括号和点)都被视为文字字符。 C++11 的正则表达式或 Boost 的正则表达式的对应语法是什么?谢谢。

【问题讨论】:

    标签: regex c++11 boost


    【解决方案1】:

    不,C++ 正则表达式不支持 \Q 和 \E 转义序列。您需要手动转义所有在正则表达式中具有特殊含义的特殊字符。在您的示例中,您需要转义 (, ) 和 .

    您可以在 C++ 11 中将上述正则表达式重写为

    std::regex re(R"(\d{3}\(a\.o\.e\)\.u\.i\.y\w+)");
    

    【讨论】:

    • 虽然可行,但并不灵活。例如,如果模式包含一个文件名,我们应该怎么做?我们可能必须首先解析和转换文件名。这太麻烦和乏味了。确实有一个提供类似 Perl 的正则表达式的 C++ 库。我刚刚挖掘了我的旧笔记本,发现 boost::regex 具有 perl 模式。事实上,这是它的默认设置。所以,问题解决了。它支持\Q 和\E。抱歉打扰了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2020-07-24
    • 2017-03-12
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多