1

我正在尝试创建一个将接受某种命令格式的正则表达式。模式如下:

可以以 $ 开头并具有以下两个值 0-9、AF、af(即:$00 - $FF)或可以是除 "&<>'/" 之外的任何值

*如果值以 $ 开头,接下来的两个值需要是从 00-ff 的有效十六进制值

到目前为止我有这个

Regex correctValue = new Regex("($[0-9a-fA-F][0-9a-fA-F])");

任何帮助将不胜感激!

4

3 回答 3

3

您只需要在“$”之前添加“\”符号即可:

        string input = "$00";

        Match m = Regex.Match(input, @"^\$[0-9a-fA-F][0-9a-fA-F]$");
        if (m.Success)
        {
            foreach (Group g in m.Groups)
                Console.WriteLine(g.Value);
        }
        else
            Console.WriteLine("Didn't match");
于 2012-08-01T02:08:19.237 回答
2

如果我正确地关注了您,那么您正在寻找的最终结果是任何不在列表“&<>'/”中的值,因为 $ 和两个字母数字字符的任何组合也不会在该列表中。因此,您可以表达:

Regex correctValue = new Regex("[^&<>'/]");

更新:但是以防万一您确实需要知道如何正确匹配 $00 - $FF,这可以解决问题:

Regex correctValue = new Regex("\$[0-9A-Fa-f]{2}");
于 2012-08-01T01:07:30.057 回答
2

在正则表达式$中用于Anchor assertion,并且意味着:

匹配必须出现在字符串的末尾或行或字符串末尾的 \n 之前。

尝试使用[$](Character Class for single character) 或\$(Character Escape) 代替。

于 2012-08-01T04:25:43.010 回答