Поиск всех ссылок и адресов электронной почты в строке

Какой самый простой способ сопоставить все ссылки и адреса электронной почты в строке с массивом списка? Я использовал preg_match в PHP, но в C# похоже, что он будет другим.


person Semas    schedule 09.06.2010    source источник
comment
Вы просите регулярное выражение или вы спрашиваете, как его использовать в С#?   -  person SLaks    schedule 09.06.2010
comment
Дубликат: stackoverflow.com/questions/591859/   -  person serhio    schedule 09.06.2010
comment
Под ссылкой вы имеете в виду только адреса http[s] или она включает mailto:, javascript: и так далее?   -  person Humberto    schedule 09.06.2010


Ответы (2)


Предполагая, что у вас уже есть работающее регулярное выражение, вы можете использовать Regex класс, например:

static readonly Regex linkFinder = new Regex(@"https?://[a-z0-9.]+/\S+|\s+@\S+\.\S+", RegexOptions.IgnoreCase);

foreach(Match match in linkFinder.Matches(someString)) {
    //Do things...
    string url = match.Value;
    int position = match.Index;
}
person SLaks    schedule 09.06.2010
comment
@serhio: \S+ должно соответствовать всему этому. В первую очередь я пытаюсь продемонстрировать, как использовать регулярное выражение. - person SLaks; 09.06.2010

Это должно работать для ссылок:

https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?

Источник

Это должно работать для адресов электронной почты:

[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}

Источник

person npinti    schedule 09.06.2010
comment
-1: существуют домены верхнего уровня, которым регулярное выражение электронной почты не соответствует (например, TLD .museum). И домен должен быть в нижнем регистре, так что на самом деле он не будет соответствовать ни одному. Regex — НЕПРАВИЛЬНЫЙ ИНСТРУМЕНТ для поиска адресов электронной почты. - person Richard; 09.06.2010
comment
@Richard: Регулярные выражения не являются неправильным инструментом для поиска электронных писем. Это именно правильный инструмент. Это неправильный инструмент для анализа и проверки, но поиск строк является целью регулярного выражения. - person John Gietzen; 09.06.2010
comment
@John: для любого короткого регулярного выражения будут действительные адреса электронной почты, которые ему не удастся найти. (Например, с тем, что в Q, многие O'Reilly будут разочарованы.) - person Richard; 10.06.2010