Анализ подстроки в C # с использованием регулярного выражения (ATL >> NET)? - PullRequest
1 голос
/ 15 апреля 2009

Что такое шаблон регулярных выражений C # и .NET, который мне нужно использовать, чтобы получить "bar" из этого URL?

http://www.foo.com/bar/123/abc

В регулярных выражениях ATL шаблон был бы

http://www\.foo\.com/{[a-z]+}/123/abc

Ответы [ 4 ]

3 голосов
/ 15 апреля 2009

Просто: # http://www\.foo\.com/([a-z]+)/123/abc#

используйте скобки вместо скобок.

Вам нужно будет использовать символ в начале и конце регулярного выражения, чтобы оно тоже работало.

2 голосов
/ 15 апреля 2009

Вот решение, которое разбивает URL-адрес на составные части; протокол, сайт и часть. Группа протоколов не требуется, поэтому вы могли бы дать выражение «www.foo.com/bar/123/abc». Группа деталей может содержать несколько подгрупп, представляющих папки и файлы на сайте.

^(?<protocol>.+://)?(?<site>[^/]+)/(?:(?<part>[^/]+)/?)*$

Вы бы использовали следующее выражение, чтобы получить 'foo'

string s = Regex.Match(@"http://www.foo.com/bar/123/abc", @"^(?<protocol>.+://)?(?<site>[^/]+)/(?:(?<part>[^/]+)/?)*$").Groups["part"].Captures[0].Value;

Разбивка результатов выражения выглядит следующим образом

протокол: http://
сайт: www.foo.com
часть [0]: бар
часть [1]: 123
часть [2]: abc

2 голосов
/ 15 апреля 2009

Это почти сработает - просто крошечная модификация - поменяйте скобки на круглые скобки.

http://www\.foo\.com/([a-z]+)/123/abc

Но я считаю, что это регулярное выражение мало используется, потому что оно включает в себя почти всю строку. Не лучше ли сопоставить первый элемент пути независимо от всего остального?

^http://[^/]*/([^/]*).*$
2 голосов
/ 15 апреля 2009

Почти то же самое

    http://www\.foo\.com/([a-z]+)/123/abc
...