Regex: соответствие ссылок в стиле уценки - PullRequest
1 голос
/ 24 мая 2010

Я хочу разобрать ссылки в стиле уценки, но у меня возникают проблемы с сопоставлением ссылок в стиле ссылок. Как этот: [id]: http://example.com/ "Optional Title Here"

Мое регулярное выражение получает идентификатор и URL, но не название.

Вот что у меня есть:

/\[([a-zA-Z0-9_-]+)\]: (\S+)\s?("".*?"")?/

Я перехожу и добавляю ссылки в хеш-таблицу. id в качестве ключа, а значение - это экземпляр класса, который я создал и который называется LinkReference, который содержит только URL и заголовок. Если проблема не в моем регулярном выражении, а в том, что мой код добавляет совпадения в хеш-таблицу, вот мой код для этого тоже:

        Regex rx = new Regex(@"\[([a-zA-Z0-9_-]+)\]: (\S+)\s?("".*?"")?");
        MatchCollection matches = rx.Matches(InputText);
        foreach (Match match in matches)
        {
            GroupCollection groups = match.Groups;
            string title = null;
            try
            {
                title = groups[3].Value;
            }
            catch (Exception)
            {
                // keep title null
            }
            LinkReferences.Add(groups[1].Value, new LinkReference(groups[2].Value, title));
        }

1 Ответ

4 голосов
/ 24 мая 2010

Я думаю, что на самом деле у вас есть два пробела между вашим URL и заголовком (он не отображается в отрисованном HTML-коде переполнения стека, но я вижу его в исходном коде страницы) .)

В любом случае, я думаю, вы хотите изменить \s? (0 или 1 пробел) на \s* (0 или более пробелов):

var rx = new Regex(@"\[([a-zA-Z0-9_-]+)\]: (\S+)\s*("".*?"")?");

Возможно, вы также захотите указать несколько пробелов по обеим сторонам от ":" и в нескольких других местах, например:

var rx = new Regex(@"\[\s*([a-zA-Z0-9_-]+)\s*\]\s*:\s*(\S+)\s*("".*?"")?");

(не мешает быть либеральным в разрешении пробелов, ИМО)

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