LINUX.ORG.RU

Поиск подстроки в тексте по регулярному выражению

 , ,


0

1

Доброго времени суток, решил написать скриптик который бы вытягивал magnet ссылки с нужного мне трекера. curl'ом получаю странчику на которой есть нужная мне ссылка, но как потом вытащить именно саму ссылку не смог додумать, гуглил в сторону sed и grep, но безуспешно, с помощью grep получается вырвать кусок странички

<a class="link" href=" magnet:?xt=blalalalalalaalalal>Ссылка</a>
подскажите как бы вырвать именно саму ссылку magnet:* правильное регулярное выражение я не в силах написать (

★★★★★

Ответ на: комментарий от jo_b1ack
$ curl -s https://thepiratebay.sx/torrent/8611075/Linux_Mint__quot_Debian_quot__-_201303_MATE_64-bit |grep -o 'magnet:[^&]*' 
magnet:?xt=urn:btih:cb26d2614bfc22e19ef19901a794c2730d4ab600
magnet:?xt=urn:btih:cb26d2614bfc22e19ef19901a794c2730d4ab600

Я только кавычку на амперсенд заменил.

ziemin ★★
()
Ответ на: комментарий от ziemin

s/.*

Честно говоря это гк: в html может быть произвольная кодировка, . - то что может встретиться в utf (и минус \n), прув: echo -n $'\x8f' | sed 's/.//' | cat -A.

Дальше, надеюсь, объяснять не надо?

anonymous
()
Ответ на: комментарий от ziemin

примного благодарен, пойду учить мат часть)

jo_b1ack ★★★★★
() автор топика

Если на sh, я бы делал так:

curl .. | html2xhtml | xml sel -N ns=http://www.w3.org/1999/xhtml -t -v '//ns:a[@class="link"]/@href'

// Правда тут два пакета, что обычно отсуствуют: html2xhtml + xmlstarlet.

anonymous
()

Это такая дисциплина спецолимпиады — парсить html регэкспами?

anonymous
()
Ответ на: комментарий от ziemin

Эта часть выбрасывается

Хорошо, объясняю дальше: если кодировка, скажем, cp1251 точка не даст любой символ, а он может встретиться в строке, в итоге отбросится до границ, определяемым таким символом (а не от начала / до конца строки). Теперь доступно?

anonymous
()
Ответ на: комментарий от anonymous

если кодировка, скажем, cp1251

Ога. А только что про utf вещал.

Не буду спорить: скорее всего curl всё перекодирует.

ziemin ★★
()
Ответ на: комментарий от ziemin

скорее всего

Слова настоящего лоровкого эксперта.

anonymous
()
Ответ на: комментарий от ziemin

Честно говоря это гк: в html может быть произвольная кодировка
. - то что может встретиться в utf (и минус \n)

если кодировка, скажем, cp1251

Ога. А только что про utf вещал

Позволю себе макнуть. Еще раз повторить? Эту же тему все видят, лучше по-тихому проверь.

anonymous
()
Ответ на: комментарий от anonymous

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

jo_b1ack ★★★★★
() автор топика
Ответ на: комментарий от jo_b1ack

Ну и хорошо, раз подходит. Для конктреного (если знать что внутри) случая подходит и regexp.

Но ведь тема на форуме не только для ТС, не так ли?)

anonymous
()
Ответ на: комментарий от anonymous

А при чем тут это? Я мог бы написать g++ или что угодно, просто g++ все-таки чаще встречается, чем javac.

cdshines ★★★★★
()
Ответ на: комментарий от ziemin

Как ты макаешься? Контр-пример в студию.

Сам попросил, пожалуйста:

> echo 'кушай<a class="link" href=" magnet:?xt=blalalalalalaalalal>Ссылка</a>' | iconv -t cp1251 > /tmp/file
> curl -s file:///tmp/file | grep magnet | sed 's/.*\(magnet:[^"]*\).*/\1/' | iconv -f cp1251
кушайmagnet:?xt=blalalalalalaalalal>Ссылка</a>

curl тут не нужен, но кто-то сказал: «скорее всего curl всё перекодирует».

anonymous
()
Ответ на: комментарий от anonymous

Не умею в XPath, я в css селкторах напишу: a[href^=«magnet:»] было бы лучше.

Тот класс может не означать что это магнет ссылка. Вообще, a.link это где-то на границе между капитанством и маразмом.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

Тот класс может не означать что это магнет ссылка.

Само собой, тут уже вопрос о точности условия: может там несколько magnet-ов. По-крайней мере лишнее не отбросит.

В xpath ^= это start-with(@href, "magnet"). btw, css это вроде shortcut к xpath.

anonymous
()
Ответ на: комментарий от ziemin

И curl и внешняя страница в условиях.

Претензия на хорошую мину? где это упомнилось до (включительно): Поиск подстроки в тексте по регулярному выражению (комментарий)

И curl есть, и file:// вполне себе внешняя. Может мне http-сервер поднимать или может искать подходящую страницу лишь для капризного обитателя лора?

anonymous
()
Ответ на: комментарий от anonymous

для капризного обитателя лора?

Всё работает идеально. А твои дурацкие инсинуации я даже проверять не стал.

В общем в итоге этой моей малюсенькой регулярке подвластен ВЕСЬ ИНТЕРНЕТ!!!

ziemin ★★
()
Ответ на: комментарий от ziemin

Всё работает идеально.

Нормально, ваши иделы вполне отвечают ценностям современного мира, все с вами будет в порядке.

anonymous
()
Ответ на: комментарий от ziemin

не стоило менять кавычки на амперсанд, потому как magnet может содержать &'ы, и в таком случае часть ссылки зарезается (в моем случае так и получилось,а с кавычками все работает)

jo_b1ack ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.