LINUX.ORG.RU

[bash] помогите с регэкспом

 


0

2

привет, all! нужна твоя помощь.

дано: <td>23:00</td><td>Взгляд изнутри. <a href=«index.php?id=159&anons=8386» style=«font-size:x-small;»>[подробнее]</a>

надо получить: name='Взгляд изнутри' и url=«index.php?id=159&anons=8386»
как это сделать без извращений вида grep -oE '<td>.*<a' и т.п.?

★★★★★

Последнее исправление: snoopcat (всего исправлений: 1)

как это сделать без извращений вида grep -oE '<td>.*<a' и т.п.?

Парсить xml регулярными выражениями — это уже извращение.

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

и это тоже

|grep -oE '".*" ' | sed 's/"//g'

есть получше варианты?

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

Сколько уже говорили про парсинг КС-грамматик конечным автоматом, а все равно находятся умники, занимающиеся этим.

encyrtid ★★★★★
()

без извращений вида

а ну тебе регэкспы кажутся извращением? без извращений — бери парсер dom

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

бери парсер dom

прямо таки dom?

anonymous
()
$ echo '<td>23:00</td><td>Взгляд изнутри. <a href="index.php?id=159&anons=8386" style="font-size:x-small;">[подробнее]</a>' \
> |grep -Eo '<td>[^<]+<a href="[^"]+"' |sed -r 's/<td>([^<]+)<a href="([^"]+)"/name=\1 url=\2/g'
name=Взгляд изнутри.  url=index.php?id=159&anons=8386

а так как ты хочешь даже с pcregrep не сделать

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

не, нельзя
вот что получается-
23:00</td><td>Взгляд изнутри. href=«index.php?id=159&anons=8386» style=«font-size:x-small;»>[подробнее]</a>

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

и что ты этим хотел сказать? твой быдлокод не делает того, что в моём посте

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

вот что получается-

У меня кривое выражение. Вот так уже:

sed -r 's@.*/td><td>(.*)<a.*@\1@'

У анонимуса лучше, кстати, только можно обойтись без grep (и я чуть-чуть его отредактировал):

sed -r 's/.*<td>([^<]+)<a href="?([^ «]+).*/name=\1 url=\2/g'

Но для начала, конечно, надо всё в одну строку записать. Например, «tr -d '\n'».

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

ах, да: это не сработает потому, что высрет остальное содержимое страницы

anonymous
()

всем спасибо, УМВР:

ftpuser@vps:~$ sh tvprog
Канал СТС
22:20: Шоу "Уральских пельменей". "Падал прошлогодний смех".
23:50: "Обнаженное оружие".
Канал ТНТ
21:35: "Комеди Клаб". Лучшее.
22:00: "Дом-2. Город любви".
23:00: "Дом-2. После заката".
23:30: "Однажды в Америке".
Канал 10 канал (Ren TV)
23:30: Что происходит?
Канал National Geographic Channel
21:00: Взгляд изнутри.
22:00: С точки зрения науки.
23:00: Взгляд изнутри.

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

python + lxml + xpath (например)

или html->xhtml конвертер + xmlstarlet

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

anonymous

не сработает, тк в тексте могут попастся переносы

убери переносы. Они ведь эквивалентны пробелу?

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

encyrtid

Сколько уже говорили про парсинг КС-грамматик конечным автоматом, а все равно находятся умники, занимающиеся этим.

дык работает же!

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

Сколько говорили о том, что sed тьюринг-фул, а всё равно приходят умники и говорят про невозможность парсинга КС-грамматик конечным автоматом.

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

Слеш забыл экранировать:

($name, $url) = /.*\/td><td>(.*?)<a href="(.*?)"/;
print "Mane = $name, url = $url\n";

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