LINUX.ORG.RU

Регулярное выражение Bash


0

1

Ребята, помогите с регулярным выражением :)
Есть HTML:
<form action="http://cs421831.vk.com/upload.php" method=«post» enctype=«multipart/form-data»> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file1»> </div> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file2»> </div> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file3»> </div> <div class=«upload_row»> <input type=«submit» class=«button» value=«Вклеить фотокарточки»> </div> </form>

Он единственный на странице, код страницы в переменной $html_code. Помогите извлечь action=«» в отдельную переменную.

Предсказываю. В кофейной гуще появляются слова..

Не. Парсить. Html. Регэкспами.

anonymous_sapiens ★★★★ ()

А может по xPath?

anonymous ()

html2xhtml | xml sel -t -v '//*[local-name()=«form»]/@action

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

А чем их парсить в баше? Я вообще не пишу на баше, просто сейчас для теста нужно.

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

Вот, например хорошее обсуждение.

А вообще если такая форма действительно единственная, то

grep action | sed 's/.*action="\(\S*\)".*/\1'

или как-то так

ЗЫ не проверял

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

Не слушай его, он обкурился stackoverflow
Для html с заведомо корректной структурой grep вполне нормальное средство
Тебе нужно нечно вроде
echo твойhtml | grep -Po '<action=«>\K.*?(?=»)'
только с кавычками сам разбирайся

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

Для html с заведомо корректной структурой grep вполне нормальное средство

Чаво? Вам про вложенность, скажем, тегов div рассказывали? Или по-вашему корректное скобочное выражение [ вида (()(())) ] распарсивается регулярной грамматикой?

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

Ну и пусть :) Мой скрипт в пару строк, потом изменить не составит труда, мне главное регулярка. А api не нужен, да и работать с ним умею, приложение с большим кол-во юзвером имеется.

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

Не похоже чтобы ТСу нужно было распарсить то что вы перечислели. Задача, сформулированная в ОП отлично решается регулярками.

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

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

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

Тогда

sed -rn '/Вклеить фотокарточки/s/.*action="([^"]+)".*/\1/p'

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

в html'е нет Вклеить фотокарточки, у меня загрузка в альбом.

<div class=«form_item upload_form»> <form action="http://cs421831.vk.com/upload.php?act=do_add&mid=142296012&aid=170689... method=«post» enctype=«multipart/form-data»> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file1» /> </div> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file2» /> </div> <div class=«upload_row»> <input type=«file» class=«upload_input» name=«file3» /> </div> <div class=«upload_row»> <input type=«submit» class=«button» value=«Вклеить фотокарточки» /> </div> </form> </div>

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

решается регулярками

А что action может внезапно оказаться не первым аттрибутом (или что будут разрывы строки), потенциальные проблемы с кавычками etc.

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

Для html с заведомо корректной структурой grep вполне нормальное средство

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

Какой плавный переход между «корректным html» и конкретным примером. @#$% - не бочки ворочать. А я комментировал именно этот ваш вброс.

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

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