2009-09-07 48 views
1

在C#中,我怎麼會在這樣的URL捕捉整數值:正則表達式爲特定的URL模式

/someBlah/a/3434/b/232/999.aspx 

我需要從上面的URL 999值。 網址必須有/someBlah/。 所有其他值如a/3434/b/232/可以是任何字符/數字。

我有'/'的逃脫嗎?

回答

4

請嘗試以下

var match = Regex.Match(url,"^http://.*someblah.*\/(\w+).aspx$"); 
if (match.Success) { 
    string name = match.Groups[1].Value; 
} 

沒有指定可能出現在ASPX文件的前面是什麼名字。我採用了簡單的方法來使用匹配字母和數字的\w正則表達式字符。您可以根據需要對其進行修改以包含其他項目。

1
^(?:.+/)*(?:.+)?/someBlah/(?:.+/)*(.+)\.aspx$ 

這有點詳盡,但它可以處理/ someBlah /不一定在字符串開頭的場景。

?:運算符意味着一個非捕獲組,它可能會或可能不會受到RegEx風格的支持。

3

您正在有效獲取沒有擴展名的文件名。

雖然你特別要求的正則表達式,除非你是在一個場景中,你確實需要使用一個,我會建議你使用System.IO.Path.GetFileNameWithoutExtension:


Path.GetFileNameWithoutExtension(Context.Request.FilePath) 
+0

但它必須匹配給定的模式,我不想修改所有的URL。 – mrblah 2009-09-07 17:01:10

+0

**我的解決方案不需要您修改任何網址。**它所做的是將文件名返回給您,無論是否匹配正則表達式。如果您需要進一步讓文件與正則表達式匹配,那麼您可以僅將過濾器應用於文件名,而不是整個URL。 – 2009-09-07 17:07:50

1
Regex regex = new Regex("^http://.*someBlah.*/(\\d+).aspx$"); 
Match match = regex.Match(url); 
int result; 
if (match.Success) 
{ 
    int.TryParse(match.Groups[1].Value, out result); 
} 

使用\ d而不是\ w可以確保您只匹配數字,除非設置了忽略大小寫標誌,否則someBlah的大小寫必須正確。