2010-03-18 101 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(); 

代替。 =)