Извлеките полную ссылку элемента отделения

Я загружаю эпизоды с ряда, но я устал для участия в сайте, копирования ссылки и загрузки его для каждого эпизода.

Во-первых, я участвую в сайте, и я получаю HTML-код. Код является большим, но я интересуюсь этим в особенности (это - где ссылка),

    var e=Array(),d=1;e[1]='<div style="margin-left:7px"><object width="720" height="450" class="BLOG_video_class" id="BLOG_video-ee57f234e359092e" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="movie" value="//www.youtube.com/get_player"><param name="bgcolor" value="#FFFFFF"><param name="allowfullscreen" value="true"><param name="flashvars" value="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&amp;autoplay=0"><embed src="//www.youtube.com/get_player" type="application/x-shockwave-flash"width="720" height="450" bgcolor="#FFFFFF"flashvars="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&autoplay=0"allowFullScreen="true" /></object></div>';e[2]='<div style="margin-left:7px"><iframe src="http://videosasd.com/play-zs-www30.zippyshare.com/v/94301695/file.html" width="720" height="450" scrolling="no" frameborder="0"></iframe></div>';

Ну, это - код looong, но мне интересно получать это. (Существует 2 идентичных ссылки, обе работы без '&amp' в конце),

    http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&amp

Теперь, я использую этот regEX (Обратите внимание, что я - новичок с этим, я тестирую его и работы),

\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&amp

И, в терминале я использую

wget -q -O - "serverlink" | sed -e "s/\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&amp//g"

Я получаю ошибку с unexpected token) '`

Кто-либо знает, как я могу зафиксировать его? (Или, возможно, кто-то знает, что лучший regex получает ссылку от первого поля кода),

1
задан 5 May 2014 в 18:35

2 ответа

Вот некоторые более простые подходы для получения то, что Вы хотите:

  1. grep с PCREs

    wget -q -O - "serverlink" | grep -oP 'flvurl=\K[^;]+(?=&amp;)' 
    

    Объяснение

    В PCREs, \K означает "отбрасывание все подобранное до здесь". -o опция к grep означает "печать только подобранная часть строки". Так, grep -oP 'flvurl=\K средства: "ищите flvurl= и начните соответствовать после него". [^;]+ означает "соответствие как многих не -; символы как возможные.

    foo(?=bar) формат называют положительным предвидением. Это не часть фактической соответствующей строки. Это означает _ "соответствие foo сопровождаемый bar но отбрасывание bar. Соединяя все это, регулярное выражение выше распечатает все между flvurl= и &amp;.

  2. sed

    wget -q -O - "serverlink" | sed -nr 's/.*flvurl=([^;]+)&amp;.*/\1/p' 
    

    Объяснение

    Оператор замены (я использую традиционное s/// вместо s\\\ Вы использовали, но это - та же идея), заменит всем с текстом между flvurl= и &amp;. Круглые скобки там для "получения" совпавшей строки, делая это доступным как \1. -r опция включает расширенные регулярные выражения, которые могут иметь дело с круглыми скобками, не будучи должен выйти (\( и \)) их. Это - причина, Вы получали ошибку между прочим.

    -n подавляет нормальный вывод, никакие строки не будут распечатаны по умолчанию. p в конце замены (s///p) означает, "печатают текущую строку, если замена была успешна".

  3. Perl

    Используя ту же логику как sed выше:

    wget -q -O - "serverlink" | perl -ne 's/.*flvurl=([^;]+)&amp;.*/$1/ && print' 
    
1
ответ дан 11 November 2019 в 12:46

Ваша командная строка передает вывод по каналу wget в sed - для замены результат из команды sed как аргумент URL на wget командной строке, необходимо будет сделать что-то как

wget -q -O- -- $(echo -n "urlstring" | sed -e 's/pattern/replacement/')

, или

wget -q -O- -- $(sed -e 's/pattern/replacement/' <<< "urlstring")

Эти -e может быть опущен в этом контексте.

0
ответ дан 11 November 2019 в 12:46

Другие вопросы по тегам:

Похожие вопросы: