C#正则表达式替换并逃离变量

时间:2012-01-04 12:10:48

标签: c# regex replace

所以我在C#中写了一个小玩具编译器,我想要做的是在print命令中,对于以'$'字符开头的每个子字符串(例如 - $ foo),替换它用适当的变量。 (基本上,'$'字符表示变量名称。)

到目前为止我所做的是使用正则表达式查找包含'$'字符的所有子字符串,但是我遇到了替换方法的问题。如何存储变量是通过FLEE评估器变量存储类。 (FLEE是快速轻量级表达式求值程序),它们充当映射,其中键是变量名,值是变量值。

我的代码如下:

        public void print(string exp)
    {
        this.expression = exp;
        MatchEvaluator eval = new MatchEvaluator(this.matchEval);
        MatchCollection coll = Regex.Matches(exp, @"(?<!\w)\$\w+");
        this.split = new string[coll.Count];
        int index = 0;
        foreach (Match match in coll)
        {
            this.split[index] = match.ToString();
            index++;
        }
        this.i = 0;
        Regex.Replace(exp, @"(?<!\w)\$\w+", eval);
        Console.WriteLine(exp);
        Console.ReadKey();
    }

    private string matchEval(Match m)
    {
        this.split[this.i] = this.split[this.i].TrimStart('$');
        if(i != split.Length-1)
            this.i++;
        return this.split[this.i];
    }

它还没有返回变量,因为它仍然返回包含'$'字符的正则表达式匹配。

任何帮助都会非常感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

正如Marcel Valdez Orozco指出的那样,表达方式并非如此。问题在于您希望通过Regex.Replace调用更新String,而是Regex.Replace返回一个新的String实例。

因此请更新您的代码以将此考虑在内:

exp = Regex.Replace(exp, @"(?<!\w)\$\w+", eval);