2010-03-18 74 views
3

我试图找到相对路径中的目录上的参考匹配的数量(“..\”)。所以我有以下模式:“(\.\.\\)”,其预期的路径为“..\..\a\b”,它会给我2个成功的组(“..\”),但是当我尝试路径“..\a\b”时,它也会返回2它应该返回1.我在一个像Expresso这样的reg工具中尝试了这个工具,它似乎可以在那里按预期工作,但是在.net中没有任何想法?问题与我的正则表达式?

+0

根据http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx,你的正则表达式在NET中工作。其他的一定是错的。 – Jens 2010-03-18 15:15:18

回答

0

我得到了正确的答案,请尝试以下操作:

你逃跑或者使用文本字符串在.NET中\

+0

非常感谢我的使用,因为您确认了Expresso的结果,所以在代码中的使用必须是错误的。将调查。 – Rubans 2010-03-18 15:32:20

+0

谢谢。看起来问题与我相关,使用Match来代替Matches,它返回一个集合。 – Rubans 2010-03-18 15:38:51

1

尝试此代替:

(\.\.\\)

的点(.)进行匹配的任意字符,而不是立即数值。要匹配文字值,您必须使用前导反斜杠来避开它们。

+0

这就是我目前的情况,但当我提交问题时,斜杠已被删除。我已经编辑了这篇文章,现在包括他们。 – Rubans 2010-03-18 15:07:39

0

由于Expresso在.net上运行,因此您的声明“我在Express Express等reg注册工具中试过并且似乎按照预期的方式在那里运行,但在.net中运行”似乎没有多大意义。
这暗示了我的意思是,它不是正则表达式,而是您使用它的正确表达式。
仔细查看一下您用来收集结果以及如何处理这些结果的Regex方法,这可能是问题所在。

希望这会有所帮助!

+0

我认为上面的帖子提出了问题,请遵循他们的建议并回报。 – Rubans 2010-03-18 15:31:21

+0

嘿,看看那个,我是对的!你使用Match而不是Matches,所以这是一个使用问题。很高兴知道你已经修好了。 – Task 2010-03-18 16:15:33

0

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

你总是可以不使用正则表达式完成这个任务,并使用

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

代替。 =)