我的正则表达式问题?

时间:2010-03-18 15:00:29

标签: c# regex

我正在尝试找到目录引用的相对路径中的匹配数(“..\”)。所以我有以下模式:“(\.\.\\)”,它按照预期的路径“..\..\a\b”工作,它会给我2个成功的组(“..\”),但是当我尝试路径“..\a\b”当它应该返回时它也将返回2.我在一个注册工具如Expresso中尝试了这个,它似乎在那里工作但不在.net,任何想法吗?

4 个答案:

答案 0 :(得分:1)

请改为尝试:

  

(\.\.\\)

点(.)匹配任何字符,而不是字面值。要匹配文字值,必须使用前导反斜杠将其转义。

答案 1 :(得分:0)

我得到了正确答案,请尝试以下方法:

Console.WriteLine(Regex.Matches(@"..\..\a\b", @"(\.\.\\)").Count); //2
Console.WriteLine(Regex.Matches(@"..\a\b", @"(\.\.\\)").Count); //1

您是否在.NET中为\转义或使用文字字符串?

答案 2 :(得分:0)

由于Expresso在.net上运行,你的声明“我在一个注册工具如Expresso中尝试过它,它似乎在那里工作,但在.net中没有工作”似乎没有多大意义。
这表明我的不是正则表达式是问题,而是你对它的使用 仔细查看您用于收集结果的Regex方法以及处理这些结果的方法,这可能是问题所在。

希望这有帮助!

答案 3 :(得分:0)

你是否逃脱反斜杠以逃避正则表达式中的点?即"\\.\\.\\\\"@"\.\.\\"

您始终无法使用Regex执行此任务并使用

Int32 count = url.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)
                 .Where(s => s == "..")
                 .Count();

代替。 =)