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 2003 中的正则表达式替换问题
在 Visual Studio 中使用正则表达式查找和替换?