在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