正则表达式实现

时间:2009-12-04 17:59:40

标签: c# regex

我遇到过这段代码,它应该确定动态(重写)网址层次结构中的父网址。基本逻辑是这样的:

"/testing/parent/default.aspx"  --> "/testing/default.aspx"
"/testing/parent.aspx"          --> "/testing/default.aspx"
"/testing/default.aspx"         --> "/default.aspx"
"/default.aspx"                 --> null

...

private string GetParentUrl(string url)
{
    string parentUrl = url;

    if (parentUrl.EndsWith("Default.aspx", StringComparison.OrdinalIgnoreCase))
    {
        parentUrl = parentUrl.Substring(0, parentUrl.Length - 12);

        if (parentUrl.EndsWith("/"))
            parentUrl = parentUrl.Substring(0, parentUrl.Length - 1);
    }

    int i = parentUrl.LastIndexOf("/");

    if (i < 2) return null;

    parentUrl = parentUrl.Substring(0, i + 1);

    return string.Format(CultureInfo.InvariantCulture, "{0}Default.aspx", parentUrl);
}

此代码有效,但它闻起来像我。它不适用于具有查询字符串的网址。如何使用正则表达式来改进它?

3 个答案:

答案 0 :(得分:4)

查看SO question "Getting the parent name of a URI/URL from absolute name C#"

的答案

这将向您展示如何使用System.Uri访问网址的细分。 System.Uri还允许以您希望的方式操作URL(嗯,而不是自定义逻辑),而不存在创建无效URL的危险。没有必要破解自己的功能来分析URL。

答案 1 :(得分:1)

直接的方法是将网址拆分为“?”并在最后连接查询字符串......

答案 2 :(得分:1)

我建议你不要在这种情况下使用Regex。解决这个任务的正则表达式将是“真正的代码味道”。上面的代码并不是那么糟糕,使用f3lix和Leon Shmulevich建议使其更好。