2012-05-17 5 views
1

Я использую следующее регулярное выражение, чтобы найти, если есть URL присутствует в тексте, однако, кажется, пропустить некоторые URL, как:URL регулярное выражение - не заставить его работать

  • youtube.be/8P0BxJO
  • youtube.com/watch?v=VrmlFL

, а также некоторые bit.ly ссылки (но не все)

Match m = Regex.Match(nc[i].InnerText, 
    @"(http(s)?://)?([\w-]+\.)+[\w-]+(/\S\w[\w- ;,./?%&=]\S*)?"); 

if (m.Success) 
{ 
    MessageBox.Show(nc[i].InnerText); 
} 

ny идеи, как это исправить?

+2

Ваше регулярное выражение возвращает true для ваших примеров; ваша проблема лежит в другом месте. – Rawling

+0

Возможно, вы можете предоставить нам более подробную информацию о вашем коде и тексте, который вы пытаетесь проанализировать. –

+1

Как и другие комментарии, оба URL-адреса работают с текущим выражением, как проверено с помощью этого небольшого удобного инструмента на http://gskinner.com/RegExr/ – Richard

ответ

0

См. Вопрос this, первый ответ должен помочь вам. Предложение и находит ссылки, а затем заменяет их, поэтому, очевидно, просто возьмите то, что вам нужно. This и this статья - это разные подходы, которые должны получить более или менее тот же результат.

Другой (возможно, более надежный) подход, не относящийся к регулярному выражению, заключался бы в том, чтобы токенизировать строку путем разделения на пробелы и пунктуацию, а затем проверять маркеры, чтобы проверить, являются ли они действительным uri, используя Uri.IsWellFormedUriString (который работает только на хорошо сформированных uri's , как this вопрос пункт вне).

Смежные вопросы