C# 中的正则表达式包括注释

本文关键字:包括 注释 正则表达式 | 更新日期: 2023-09-27 18:32:07

我有一个字符串:

String str = { { /*start address*/ 0x00004200, /*Length*/ 0x00003CBF } , { /*start address*/ 0x00004200, /*Length*/ 0x00003CBF } };

我需要使用正则表达式验证上述字符串。

我写的正则表达式是:

^{ *{ *([/*]{1} *('S* *)* *[*/]{1} *)?(0x)?[0-9a-fA-F]{1,8}, *([/*]{1} *('S* *)* *[*/]{1} *)?(0x)?[0-9a-fA-F]{1,8} *} *( *,'s*{ *([/*]{1} *('S* *)* *[*/]{1} *)?(0x)?[0-9a-fA-F]{1,8}, *([/*]{1} *('S* *)* *[*/]{1} *)?(0x)?[0-9a-fA-F]{1,8} *})*'s*} *;$

我知道这有点复杂。我无法正确处理。应用程序只是在 Regex.Match 行崩溃。

我认为问题在于字符串和正则表达式 w.r.t 之间有/* 和 */是不正确的。

C# 中的正则表达式包括注释

像下面这样更改您的正则表达式。

^{ *{( *[/*]{2} *(?:(?!/'*|'*/).)*'*/ *(?:0x)?[0-9a-fA-F]{1,8} *)(?:, *[/*]{2} *(?:(?!/'*|'*/).)*'*/ *(?:0x)?[0-9a-fA-F]{1,8} *)} *, *{ *[/*]{2} *(?:(?!/'*|'*/).)*'*/ *(?:0x)?[0-9a-fA-F]{1,8} *, *[/*]{2} *(?:(?!/'*|'*/).)*'*/ *(?:0x)?[0-9a-fA-F]{1,8} *} *};$

演示

试试这个。

string txt="{ { /*start address*/ 0x00004200, /*Length*/ 0x00003CBF } , { /*start address*/ 0x00004200, /*Length*/ 0x00003CBF } }";
string re1="(''{)"; // Any Single Character 1
string re2=".*?";   // Non-greedy match on filler
string re3="(''/''*[''d''D]*?''*''/)";  // C Comment 1
Regex r = new Regex(re1+re2+re3,RegexOptions.IgnoreCase|RegexOptions.Singleline);
Match m = r.Match(txt);