是否可以在C ++中为正则表达式内联写注释?我发现Python中的多行可注释正则表达式对于以后的可读性和可维护性非常有用。否则,为正则表达式编写注释的规范方法是什么?
很抱歉,这可能是一个重复的问题,但我所有的搜索只是打开C ++正则表达式找到C风格的评论......
答案 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)
答案取决于您正在使用的正则表达式库。 PCRE? std::regex? Boost.Regex?还有别的吗?
Boost.Regex的Perl语法支持comments,虽然语法看起来不像Python那样好。 PCRE应该支持Python风格的评论。我在std::regex
中没有看到任何关于评论的内容。
否则,你有几个选择。
首先,作为@StilesCrisis says,字符串连接非常简单。
其次,在C ++ 11中,您可以创建一个理解并删除注释的user-defined literal。