Реализация Regex - PullRequest
       1

Реализация Regex

2 голосов
/ 04 декабря 2009

Я столкнулся с этим фрагментом кода, который должен определять родительский URL в иерархии динамических (переписанных) URL. Основная логика выглядит так:

"/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);
}

Этот код работает, но пахнет для меня. Он не будет работать с URL, которые имеют строку запроса. Как я могу улучшить его с помощью регулярных выражений?

Ответы [ 3 ]

4 голосов
/ 04 декабря 2009

Посмотрите ответы на ТА вопрос "Получение родительского имени URI / URL из абсолютного имени C #"

Это покажет вам, как использовать System.Uri для доступа к сегментам URL. System.Uri также позволяет манипулировать URL-адресами так, как вы хотите (ну, а не пользовательской логикой) без опасности создания недействительных URL-адресов. Нет необходимости взламывать ваши собственные функции для разбора URL.

1 голос
/ 04 декабря 2009

Я рекомендую вам не использовать Regex в этом сценарии. Regex, который решает эту задачу, будет "настоящим запахом кода". Выше код не так уж и плох, используйте рекомендации f3lix и Leon Shmulevich, чтобы сделать его лучше.

1 голос
/ 04 декабря 2009

Прямой подход будет разделять URL на "?" и объединить строку запроса в конце ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...