在C#中,我怎麼會在這樣的URL捕捉整數值:正則表達式爲特定的URL模式
/someBlah/a/3434/b/232/999.aspx
我需要從上面的URL 999值。 網址必須有/someBlah/
。 所有其他值如a/3434/b/232/
可以是任何字符/數字。
我有'/'的逃脫嗎?
在C#中,我怎麼會在這樣的URL捕捉整數值:正則表達式爲特定的URL模式
/someBlah/a/3434/b/232/999.aspx
我需要從上面的URL 999值。 網址必須有/someBlah/
。 所有其他值如a/3434/b/232/
可以是任何字符/數字。
我有'/'的逃脫嗎?
請嘗試以下
var match = Regex.Match(url,"^http://.*someblah.*\/(\w+).aspx$");
if (match.Success) {
string name = match.Groups[1].Value;
}
沒有指定可能出現在ASPX文件的前面是什麼名字。我採用了簡單的方法來使用匹配字母和數字的\w
正則表達式字符。您可以根據需要對其進行修改以包含其他項目。
^(?:.+/)*(?:.+)?/someBlah/(?:.+/)*(.+)\.aspx$
這有點詳盡,但它可以處理/ someBlah /不一定在字符串開頭的場景。
?:運算符意味着一個非捕獲組,它可能會或可能不會受到RegEx風格的支持。
您正在有效獲取沒有擴展名的文件名。
雖然你特別要求的正則表達式,除非你是在一個場景中,你確實需要使用一個,我會建議你使用System.IO.Path.GetFileNameWithoutExtension:
Path.GetFileNameWithoutExtension(Context.Request.FilePath)
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的大小寫必須正確。
但它必須匹配給定的模式,我不想修改所有的URL。 – mrblah 2009-09-07 17:01:10
**我的解決方案不需要您修改任何網址。**它所做的是將文件名返回給您,無論是否匹配正則表達式。如果您需要進一步讓文件與正則表達式匹配,那麼您可以僅將過濾器應用於文件名,而不是整個URL。 – 2009-09-07 17:07:50