0

我有一个包含太多部分的文件,例如

 [Section]

 [Section.Ia32]

 [Section.x64].... so more

所以,我需要定义一个宏,以便在解析文件时我们可以使用一个宏来获取该部分。目前我正在尝试,

#define APattern = "(^(\\s)*\\[Section(\\.\\w+)*\\])"; 

它编译成功......但它不工作。

例如

  CString a = Section;
  a.compareNoCase(APattern);

它不工作..

谢谢

4

3 回答 3

1

我认为您有 2 个问题,第一个问题是关于 C 宏语法,由 fiscblog 答案 (+1) 正确解决,另一个问题是您似乎实际上期望正则表达式匹配,即超过 CString 功能。例如,请参阅此答案以获取在 Visual C++ 中工作的正则表达式匹配

说实话,我会使用 sscanf 来解决这个问题,或多或少像

#define ASection(In, Section) (sscanf(In, " [Section(%^[)])", Section) == 1)
于 2013-06-17T07:14:41.340 回答
1

使用#define 粘贴名称后的所有内容。因此,对于您的示例,结果将是:

CString a = Section;
a.compareNoCase( = "(^(\\s)*\\[Section(\\.\\w+)*\\])"; );

您可以自己看到它是无效的语法。对于正确的定义,您可以倒退:

a.compareNoCase( "(^(\\s)*\\[Section(\\.\\w+)*\\])" );
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-->
#define APattern "(^(\\s)*\\[Section(\\.\\w+)*\\])"
于 2013-06-17T07:15:54.367 回答
1

我认为您定义中的语法不正确。在 c++ 中,没有定义

    "=", 

比较喜欢

    #define SQR(a) (a * a). 

因此,在您的定义中,也缺少一个参数。不要使用

     ";" 

在行尾。其次,您将结果作为参数传递给函数

    a.compareNoCase(), 

您的定义返回的类型的含义可能不正确。

于 2013-06-17T07:05:56.657 回答