URL регулярного выражения - PullRequest
0 голосов
/ 09 июня 2009

Привет, я пытаюсь разработать программу на C # для очистки URL-адресов флэш-фильмов на веб-сайте, это код, который я пытаюсь разобрать

flashvars="file=http://cache01-videos02.myspacecdn.com/24/vid_878ccd5444874681845df39eb3f00628.flv"/>

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

Файл = http://[^/]+/(.*)flv

Однако он выводит с частью file =, Как отфильтровать файл = part?

Ответы [ 2 ]

2 голосов
/ 09 июня 2009

Я думаю, вам нужно это:

var url=@"flashvars=""file=http://cache01-videos02.myspacecdn.com/24/vid_878ccd5444874681845df39eb3f00628.flv""";
        var match = Regex.Match(url, @"file=(?<flashurl>http://[^/]+/(.*)flv)");
        var scrapedurl = match.Groups["flashurl"].Value;

Часть (?/<flashurl>...) извлечет часть в скобках и даст ей имя "flashurl";

0 голосов
/ 09 июня 2009

Измените Regex на следующее и используйте свойство Groups

public void ScrapeURLs(String input) {
  Regex regex = new Regex("file=(http://[^/]+/.*flv)");

  foreach(Match m in regex.Matches(input)) {
     //The URL should now be in the Groups property
     //Note that Groups is a zero based index but Groups[0] will give the complete match
     String url = m.Groups[1].Value;

     //Do something with the URL...
  }
}

Обычно синтаксис регулярных выражений в .Net использует скобки () для группировки, каждое выражение в скобках в шаблоне будет доступно через свойство Groups. Группы нумеруются слева направо с нуля, НО все совпадение всегда рассматривается как группа и всегда будет иметь индекс 0 в коллекции групп

Редактировать

Одна вещь, которую следует отметить с этим шаблоном, состоит в том, что, если вход содержит несколько флэш-URL, то жадная природа регулярных выражений приведет к странному совпадению, включающему весь текст от начала первого URL до конца последний URL.

...