如何在c ++中评论正则表达式?

时间:2014-03-04 18:43:21

标签: c++ regex

是否可以在C ++中为正则表达式内联写注释?我发现Python中的多行可注释正则表达式对于以后的可读性和可维护性非常有用。否则,为正则表达式编写注释的规范方法是什么?

很抱歉,这可能是一个重复的问题,但我所有的搜索只是打开C ++正则表达式找到C风格的评论......

3 个答案:

答案 0 :(得分:4)

如果将正则表达式作为常规C ++字符串输入,则很容易。即使注释混合在一起,两个在C ++中彼此相邻的引用字符串也会自动合并为一个大字符串。所以:

"^Hello "  /* this is the first part of my regex */
"World!$"  /* this is the second part of my regex */

以相同的方式解析:

"^Hello World!$" /* this is the whole regex on one line */

答案 1 :(得分:3)

这取决于您要评论的级别。块评论 在正则表达式之上,解释它正在尝试的内容 匹配,可能是最重要的。但如果你有 somethihng复杂,你可以打破表达 多个字符串文字(只有空格和 他们之间的评论)并评论这些:

std::regex matchFloatingPointLiteral(
        "\\d+\\.\\d*(?:[Ee][+-]\\d+)?"    //  matches forms starting with digit
    "|" "\\.\\d+(?:[Ee][+-]\\d+)?"        //  matches forms starting with a .
    "|" "\\d+?:[Ee][+-]\\d+"              //  matches forms with no decimal
    );

这在正则表达式开始获取时非常有用 复杂。

答案 2 :(得分:0)

答案取决于您正在使用的正则表达式库。 PCREstd::regexBoost.Regex?还有别的吗?

Boost.Regex的Perl语法支持comments,虽然语法看起来不像Python那样好。 PCRE应该支持Python风格的评论。我在std::regex中没有看到任何关于评论的内容。

否则,你有几个选择。

首先,作为@StilesCrisis says,字符串连接非常简单。

其次,在C ++ 11中,您可以创建一个理解并删除注释的user-defined literal