Visual Studio 正则表达式

Posted

技术标签:

【中文标题】Visual Studio 正则表达式【英文标题】:Visual Studio Regex 【发布时间】:2014-11-12 23:47:10 【问题描述】:

我对 Regex 还很陌生,我的问题似乎总是我的 regex 在所有在线 Regex 测试人员中都有效,但在 Visual Studio 中却从来没有。

这是我的正则表达式:

    "void TestSerializableClass\\:\\:TestSerializableClassPreSerializationCallback\\(\\)\\s"
    "\\s+USER_CODE_REGION\\(TestSerializableClass_PreSerializationCallback\\)\\s+"
    "//Write the PreSerialization code here\\s+USER_CODE_ENDREGION"
    "\\(TestSerializableClass_PreSerializationCallback\\)\\s+";

我希望它找到这个:

void TestSerializableClass::TestSerializableClassPreSerializationCallback()

    USER_CODE_REGION(TestSerializableClass_PreSerializationCallback)
    //Write the PreSerialization code here
    USER_CODE_ENDREGION(TestSerializableClass_PreSerializationCallback)

我收到此错误:

Invalid content of repeat range.  The error occurred while parsing the regular expression fragment: 'ack\(\)\s>>>HERE>>>\s+USER_CO'.

这是在我尝试将其移植到 Visual Studio 之前正在工作的正则表达式:

void TestSerializableClass::TestSerializableClassPreSerializationCallback\(\)\s\s+USER_CODE_REGION\(TestSerializableClass_PreSerializationCallback\)\s+//Write the PreSerialization code here\s+USER_CODE_ENDREGION\(TestSerializableClass_PreSerializationCallback\)\s+

【问题讨论】:

您正在尝试将 C++ 代码与正则表达式匹配?!无论如何,作为第一步,大量减小您要匹配的函数的大小。像,大量。然后建立它直到它失败。然后你就会知道失败的地方。调试m8! :) 是的,它是用于代码生成器的测试用例。确保它生成正确的函数。 你知道有不同种类的正则表达式语法吗? (而且那个 Regexp 不能正确处理 C++ 代码?) 您是否正确地转义了两次反斜杠?您需要在代码中转义它们,但也需要在寻找转义反斜杠的表达式中转义(例如,要查找文字 \ 你需要 \\\\) 【参考方案1】:

Boost(和 C++11)在独立文字量词范围运算符 方面存在问题。 所以你所要做的就是逃离他们。

我通过RegexFormat 5 进行了几次按钮点击。 它有一个免费的内置 boost 正则表达式测试器,如果你想格式化你必须得到一个密钥。 解析、制作 c++ 字符串、格式化/压缩/cmets 正则表达式,并对其进行测试.. 方便的工具,如果您正在为 C++ 进行大量正则表达式开发,这就是您要走的路。

"(?x)                                                                                                \n"
"     void\\ TestSerializableClass\\:\\:TestSerializableClassPreSerializationCallback\\(\\) \\s      \n"
"     \\ \\s+                                                                                       \n"
"     USER_CODE_REGION\\(TestSerializableClass_PreSerializationCallback\\) \\s+                      \n"
"     //Write\\ the\\ PreSerialization\\ code\\ here \\s+                                            \n"
"     USER_CODE_ENDREGION\\(TestSerializableClass_PreSerializationCallback\\) \\s+                   \n"
"     \\                                                                                            \n"

输出:

 **  Grp 0 -  ( pos 0 , len 263 ) 
void TestSerializableClass::TestSerializableClassPreSerializationCallback()

    USER_CODE_REGION(TestSerializableClass_PreSerializationCallback)
    //Write the PreSerialization code here
    USER_CODE_ENDREGION(TestSerializableClass_PreSerializationCallback)
  

【讨论】:

以上是关于Visual Studio 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio、查找和替换、正则表达式

Visual Studio 2003 中的正则表达式替换问题

在 Visual Studio 中查找和替换正则表达式

在 Visual Studio 中使用正则表达式查找和替换?

Visual Studio C++ 标准正则表达式获取标签直到空格

Visual Studio 使用正则表达式查找无重复项