如何获得'\'或'//'的最后一个索引,以哪个为止?

时间:2014-11-17 13:59:47

标签: c# asp.net .net string

我想从url获取lastindexof来自数据库的基于' \'或者' //'

比如说我有这样的字符串

 Administration\Masters\EmployeePulseDetailsMaster.aspx
 Administration/Masters/SearchKnowYourCollegues.aspx
 Administration//SMS//PushSMS.aspx

我正在使用该代码

foreach (var item in SessionClass.UserDetails.SubModules)
{
    if (Request.RawUrl.Contains(item.PageURL.Substring(item.PageURL.LastIndexOf('\\') + 1))
     || Request.RawUrl.Contains(item.PageURL.Substring(item.PageURL.LastIndexOf('/') + 1)))
    {
        Response.RedirectPermanent("~/Login.aspx");
    } 
}

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式通过构造如下所示的正则表达式来查找组中任何字符的最后一个匹配项:

[target-group][^target-group]*$

在您的情况下,目标群组为[/\\],因此搜索结果如下:

var match = Regex.Match(s, @"[/\\][^/\\]*$");

这是一个正在运行的例子:

var data = new[] {
    @"quick/brown/fox"
,   @"jumps\over\the\lazy\dog"
,   @"Administration\Masters\EmployeePulseDetailsMaster.aspx"
,   @"Administration/Masters/SearchKnowYourCollegues.aspx"
,   @"Administration//SMS//PushSMS.aspx"
};
foreach (var s in data) {
    var m = Regex.Match(s, @"[/\\][^/\\]*$");
    if (m.Success) {
        Console.WriteLine(s.Substring(m.Index+1));
    }
}

打印

fox
dog
EmployeePulseDetailsMaster.aspx
SearchKnowYourCollegues.aspx
PushSMS.aspx

Demo.

答案 1 :(得分:1)

我想您要确定当前页面的名称是否在SessionClass.UserDetails.SubModules列表中。然后,我使用Request.Url.Segments.Last()仅获取当前页面的名称(f.e。PushSMS.aspx)和System.IO.Path.GetFileName以获取每个网址的名称。 GetFileName适用于/\

string pageName = Request.Url.Segments.Last(); 
bool anyMatch = SessionClass.UserDetails.SubModules
    .Any(module => pageName == System.IO.Path.GetFileName(module.PageURL)); 

if(anyMatch) Response.RedirectPermanent("~/Login.aspx");

您需要为using System.Linq;添加Enumerable.Any