Использование регулярного выражения Embedly API в C # - PullRequest
0 голосов
/ 04 августа 2010

В Embedly есть отличный генератор регулярных выражений, с помощью которого можно проверить правильность URL-адресов служб (http://api.embed.ly/tools/generator).. Он генерирует регулярные выражения javascript, но, к сожалению, он не генерирует выражения регулярных выражений в c #. Насколько я знаю,C # использует то же определение регулярных выражений ECMA, и поэтому я должен иметь возможность использовать в C #

Так что я хотел бы добиться, это взять сгенерированное регулярное выражение с сайта embdly и просто вставить его в мой код на c #.

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

/http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*#.*|.*\.youtube\.com\/.*#.*\/.*|picasaweb\.google\.com.*\/.*\/.*#.*|picasaweb\.google\.com.*\/lh\/photo\/.*|picasaweb\.google\.com.*\/.*\/.*)/i

и должно соответствовать URL-адресам:

http://picasaweb.google.com/westerek/LadakhDolinaMarkha?feat=featured#5497194022344000402 http://www.youtube.com/watch?v=GVDc1uXda6Y&feature=related

На данный момент у меня есть следующее:

Regex regex = new Regex(
      "[/http:\\/\\/(.*youtube\\.com\\/watch.*|.*\\.youtube\\.com\\/"+
      "v\\/.*|youtu\\.be\\/.*|.*\\.youtube\\.com\\/user\\/.*#.*|.*\\."+
      "youtube\\.com\\/.*#.*\\/.*|picasaweb\\.google\\.com.*\\/.*\\/"+
      ".*#.*|picasaweb\\.google\\.com.*\\/lh\\/photo\\/.*|picasaweb"+
      "\\.google\\.com.*\\/.*\\/.*)/i]",
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );

.. но это дает мне только частичные совпадения ..

РЕДАКТИРОВАТЬ: Решение: Просто вставьте выражение регулярного выражения embedly javascript в строку strEmbdlyRegex вследующий фрагмент.

    string strEmbdlyRegex = @"/http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*#.*|.*\.youtube\.com\/.*#.*\/.*)/i";

string strRegx = strEmbdlyRegex.Remove(0, 1);
strRegx = strRegx.Remove(strRegx.IndexOf("("), 1);
strRegx = strRegx.Remove(strRegx.LastIndexOf(")/i"), 3);
strRegx = strRegx + "]";

regex = new Regex(
     strRegx,
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.ECMAScript
    | RegexOptions.Compiled
    );

1 Ответ

2 голосов
/ 04 августа 2010

Было бы полезно немного конкретнее разобраться с вашей проблемой, но, похоже, она работает (по крайней мере, с вашими двумя тестовыми строками).Вам просто нужно очистить несколько посторонних символов:

  • Преобразовать его в буквальную строку, используя синтаксис @"" (без экранирования обратной косой черты)
  • Удалить [/ изначало строки
  • Удалите \i из конца строки
  • Удалите ( и ) возле начала и конца строки

Кроме того, вам, вероятно, не нужен параметр IgnorePatterWhitespace , а для простого URL вам, вероятно, также не нужен параметр CultureInvariant .

Наконец, есть опция RegexOptions.ECMAScript , которая позволяет передавать / regex / i и интерпретировать его так же, как JavaScript будет обрабатывать его.

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