【发布时间】:2015-02-03 15:32:09
【问题描述】:
在 VS2012 中是否有任何方便的方法来伪造原始字符串? (我正在考虑使用预处理器宏,但愿意接受建议。)
我的用例是一个相当长但静态的正则表达式列表,所有转义的\ 几乎都无法阅读。
替代代码如下:
p[TokenType::Comment ] = "(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/)|(//.*)";
p[TokenType::Float ] = "[0-9]+\\.[0-9^(A-Za-z)]*";
p[TokenType::Integer ] = "[0-9]+";
p[TokenType::String ] = "\\\"([^\\\"\\\\\\\\]|\\\\\\\\.)*\\\"";
p[TokenType::Identifier ] = "[a-zA-Z_][a-zA-Z0-9_]*";
p[TokenType::Operator ] = "\\^|\\*|\\/|\\+|\\-|\\=";
p[TokenType::BinaryOperator] = "(\\=\\=)|(\\+\\=)|(\\-\\=)|(\\*\\=)|(\\/\\=)";
p[TokenType::WhiteSpace ] = "\\s+";
p[TokenType::EndOfStatement] = ";";
p[TokenType::ListStart ] = "\\(";
p[TokenType::ListDelimiter ] = "\\,";
p[TokenType::ListEnd ] = "\\)";
p[TokenType::BlockStart ] = "\\{";
p[TokenType::BlockEnd ] = "\\}";
(简直丑陋且难以维护。)
我发现将所有内容放在一个文本文件中并在运行时加载它,但我宁愿不必分发它。建议?
【问题讨论】:
-
编写一个工具,获取一个文本文件并输出一个带有正确转义的字符串文字的 .cpp 文件,也许?
-
您至少可以将正则表达式拆分成更小的部分并将它们连接起来。每件作品都可重复使用,更易于查看。
标签: c++ regex string visual-studio-2012