gpt4 book ai didi

c++ - 正则表达式匹配任何行上的多个 MBCS 字符串

转载 作者:太空狗 更新时间:2023-10-29 21:44:50 25 4
gpt4 key购买 nike

我正在寻找一个正则表达式来匹配 C++ 项目中的 MBCS 字符串。这些是包含在双引号中的字符串,没有 L"..."_T("...")说明符。任何一行代码都可以有多个引号。字符串可以包含不应结束匹配的转义子字符串。下面是几个例子:

"This is a MBCS string"; // "This is a MBCS string" match
_T("This is maybe a unicode string"); // no match
L"This is a unicode string"; // no match
"These both" + "should match"; // "These both" and "should match" match
"This is a \"quoted\" string"; // "This is a \"quoted\" string" match

我有一个正则表达式,可以使用负面回顾处理所有这些问题 (?<!#include )(?<!_T\()(?<!\\)(?<!L)\"(.*?)\"(?<!\\\")但它变得更复杂了。它开始出现在一行中混合字符串类型的问题。

_T("Maybe this") + "is a match"; // "is this" match but instead would match ") + "
do_something(_T("This doesn't match")) + do_something("but this does match"); // "but this does match" match but instead it matches ")) + do_something("

如何让正则表达式不匹配 _T("")L""单词但仍然匹配它们以吃掉结束引号而不将其作为匹配项返回?

编辑:这个正则表达式,(?:_T\(\"[^\"]+\"\).*?|L\"[^\"]+\".*?)*(?<!#include )(?<!_T\()(?<!L)(?<!\\)\"(.*?)\"(?<!\\\") ,几乎完成了这项工作,但还有一个失败的测试用例,我最初没想到要包括在内。

_T("don't match this") + _T("or this"); // shouldn't match anything, matches ") + _T("

最佳答案

您实际上可能会匹配 _TL 部分,以便在之前的匹配中使用它们:

(?:_T\(\"[^\"]+\"\).*?|L\"[^\"]+\".*?)?(?<!#include )(?<!_T\(|L|\\)\"(.*?)\"(?<!\\\")

我还缩短了负面回顾。

regex101 demo

关于c++ - 正则表达式匹配任何行上的多个 MBCS 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com