2009-09-07 50 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的大小写必须正确。