繁体   English   中英

用C/C++编写正则表达式时如何避免反斜杠转义

[英]How to avoid backslash escape when writing regular expression in C/C++

对于正则表达式\\w+\\d,在perl/python等很多脚本语言中都可以直接写成。 但是在 C/C++ 中,我必须把它写成:

const char *re_str = "\\w+\\d";

这很难看。

有什么方法可以避免吗? MACRO 也是可以接受的。

仅供参考,下一个 C++ 标准 (C++ 0x) 将具有称为原始字符串文字的东西,它应该让您执行以下操作:

const char *re_str = R"(\w+\d)";

但是,在那之前,如果您希望正则表达式成为源文件中的文字,我认为您会陷入将反斜杠加倍的痛苦中。

当我阅读 [C:参考手册] 第 3 章:Prepressors 时。 一个想法出现:

 #define STR(a) #a
 #define R(var, re)  static char var##_[] = STR(re);\
 const char * var = ( var##_[ sizeof(var##_) - 2] = '\0',  (var##_ + 1) );

 R(re, "\w\d");
 printf("Hello, world[%s]\n",  re);

它在 C 和 C++ 中都是可移植的,仅使用标准的预处理功能。 诀窍是使用宏在 liternal 字符串中扩展 \\ ,然后删除前导和尾随双引号字符串。

现在我认为这是最好的方法,直到 C++0x 真正引入新的文字字符串语法 R"..."。 对于 CI 来说,这将是很长一段时间内最好的方式。

副作用是我们不能在 C 的全局范围内定义这样的变量。因为有一个语句来删除尾部的双引号字符。 在 C++ 中没问题。

如果您有很多或需要经常修改它们,您可以将您的正则表达式放在一个文件中并阅读该文件。 这是我认为避免反斜杠的唯一方法。

不。C++ 中只有一种字符串文字,它是处理转义字符的那种。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM