【问题标题】:Regex in c# including commentsc# 中的正则表达式,包括注释
【发布时间】:2015-01-25 19:20:39
【问题描述】:

我有一个字符串:

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 之间存在 /* 和 */ 这是不正确的。

【问题讨论】:

  • 尝试在debuggex.com 调试它,您可以在其中输入一个正则表达式并查看它的可视化表示,并输入数据以对其进行测试。这比在 C# 中尝试要容易得多。
  • 谢谢你,马修。我试过这个工具。但我无法理解它的工作原理。
  • @MatthewWatson 我可以使用该工具并计算出另一个正则表达式。感谢分享工具参考。很有帮助!!

标签: c# regex comments


【解决方案1】:

如下更改您的正则表达式。

^{ *{( *[/*]{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} *} *};$

DEMO

【讨论】:

  • 谢谢阿维纳什。我试过你的代码。但有一个例外:“无法识别的分组构造”。
【解决方案2】:

试试这个。

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2011-11-25
    • 1970-01-01
    • 2010-11-25
    • 2014-12-17
    相关资源
    最近更新 更多