可以看到在\s?之后,我用.+?来尽量少的匹配字符,直到遇到))或者")就停止匹配,如果只用.+,就会过多的匹配括号。 光有正则表达式还不够,还要能替换。替换的难点在如何保留第一个变量。正则表达式提供了提取括号里匹配到则值得机制,如(\w)\1(\w)\2,能够匹配aabb,第一个\w匹配到了a,由于在括号中,因此被记录了下来,可通过\1来获得第一个括号中的内容,以此类推。在替换时,C#(其他语言不清楚),可利用$1来获得第一个括号中匹配到的内容。则替换的语句是MB($1)。注意,这里替换的语句不需要转义,因为替换不需要匹配,只要将字符原封不动替换就可以了。下面是代码:
public static void Lesson4(){
Console.WriteLine("第四课,替换函数。");
string rule = @"MA\((.+?),\s?.+?(\)\)|""\))";
string[] enters =
{
@"Console.WriteLine(MA(""a"", ""b""))",
@"Console.WriteLine(""a"" + MA(""a"", GetType().ToString()));",
@"Console.WriteLine(MA(""a"", GetType().ToString()));",
@"Console.WriteLine(""a"" + MA(""a"", ""a"".Substring(1)) + ""b"");"
};
string replacement = @"MB($1)";
foreach (var enter in enters)
{
Console.WriteLine(Regex.Match(enter, rule).Convert2String(enter));
Console.WriteLine("替换后由{0}变为{1}", enter, Regex.Replace(enter, rule, replacement));
}
}
正则表达式看起来很难,但如果您把这4课都做一遍,就已经基本掌握了正则表达式了,日常的应用是没有问题的。语法有些难记,我的建议是先不管语法,要用就随时翻手册。欢迎各位同学在评论区与我互动。