LINUX.ORG.RU

[perl] Распарсить html-форму

 


0

0

Есть:

$aaa=<<zzz;
<input value='zzz' type="text" name="ddd">
zzz

Надо из этого получить name и value, при этом учесть, что порядок параметров может быть произвольным.

Сам набил вот такое:

$aaa=~m/<\S+(?{%inf=()})(\s+([^\s=]+)(?{$inf{'n'}=$^N})\
s*=\s*((['"])(.+?[^\\])\4(?{$inf{$inf{'n'}}=$^N})|(\
S)(?{$inf{$inf{'n'}}=$^N})))+\s*\/?\s*>/;

print map{"$_ = $inf{$_}\n"}keys %inf;

На выходе имеем хеш:

n = name
value = zzz
name = ddd
type = text

А нельзя ли попроще? Особенно учитывая, что мне не нужны все параметры, а надо только name и value? Что-то вроде ~/<\S(_разветвление_ (name=...)&(value=...))>. Символ & в perlre не упоминается :(

Ответ на: комментарий от ott

Ну, CPAN я давно знаю, только после:

=head2 Ucs2Asc

I<$sAsc> = OLE::Storage_Lite::Ucs2Asc(I<$sUcs2>);

Utility function. Just deletes 0x00 afeter words in I<$sUcs>.

я стараюсь не использовать код из этой помойки. Причем это далеко не первый случай такого "правильного кода". Проще самому велосипед изобрести.

EmStudio
() автор топика

Возьми какой-нибудь генератор парсеров c BNF-поднобным синтаксисом и не еби мозги.

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

> Возьми какой-нибудь генератор парсеров c BNF-поднобным синтаксисом

Имя, сестра, имя! Ну и ссылку на howto до кучи.

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

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

Хинт: На кпане есть все. Природа наделила нас встроенным фильтром.

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