URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1228
[ Назад ]

Исходное сообщение
"Регулярные выражения. Как вытащить текст из тэгов ?"

Отправлено RUSLAN , 26-Дек-02 16:31 
Немогу вытащить текст из тегов которые расположены
не в одной строке, например:
<h1> text text,
text  some text,
text
text
text text </h1>
Только надо вытаскивать весь текст ?


Содержание

Сообщения в этом обсуждении
"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено uldus , 27-Дек-02 13:28 
>Немогу вытащить текст из тегов которые расположены
>не в одной строке, например:
><h1> text text,
>text  some text,
>text
>text
>text text </h1>
>Только надо вытаскивать весь текст ?

Поищи на CPAN модули парсинга HTML, простой регексп здесь не поможет.
perldoc HTML::SimpleParse
или perldoc HTML::Parser


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено SS , 28-Дек-02 06:39 
Почему это regexp "не поможет"?


Тебе же не далее как дней десять назад ilya подсказал ход мыслей в подобных ситуациях...

http://www.opennet.me/openforum//vsluhforumID9/1193.html


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено RUSLAN , 28-Дек-02 15:08 
>Почему это regexp "не поможет"?
>
>
>Тебе же не далее как дней десять назад ilya подсказал ход мыслей
>в подобных ситуациях...

  я пробовал этот вариант, но он подходит только для одинарных тэгов типа <meta ...>, а если брать два тэга, то только выдирает один раз. Может что-то не то я делал.  



"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено konst , 28-Дек-02 16:24 
>  я пробовал этот вариант, но он подходит только для одинарных тэгов типа <meta ...>, а если брать два тэга, то только
>выдирает один раз. Может что-то не то я делал.  
Если тэг на стр встречается несколько раз
Надо собрать их в массив. Потом разбирать массив...
Напр. в той программке от konst перед всеми
$notfull = "";
вставить
push(@rez,$rez);
$notfull = "";

а в конце вместо print ..
print "TAG = $tag\n";
foreach $r (@rez) {
  ++$i;
  print "$i: $r \n";
}


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено uldus , 30-Дек-02 09:59 
>Почему это regexp "не поможет"?

Помочь может лишь достаточно сложный комплекс регекспов, и то при условии - неделя на штудирование стандартов w3, неделя на непонимание почему не всегда работает и месяц на отладку и поиск исключений из правил :-)


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено konst , 28-Дек-02 15:13 
>Немогу вытащить текст из тегов которые расположены
>не в одной строке, например:
><h1> text text,
>text  some text,
>text
>text
>text text </h1>
>Только надо вытаскивать весь текст ?
>
=== + можно напр. так ===
$fn = $ARGV[0]; # $fn = 'htm-file';
$tag = $ARGV[1]; # $tag = 'h1';
open(FN,$fn) || die "$!\n";
while(<FN>) {
    chomp;
    if (/<$tag[^>]*>(.*?)(<\/$tag>)?(.*)$/i) {
    unless ($2) {
        $rez = $3;
        $notfull = " ";
    } else {
        $rez = $1;
        $notfull = "";
    }
    next;
    }
    if ($notfull) {
    if (/^(.*?)<\/$tag>/i) {
        $rez .= " ". $1;
        $notfull = "";
    } else {
        $rez .= " ". $_;
    }
    next;
    }
}
print "within those tags \"$tag\"  text =  $rez\n";



"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено Parish , 04-Янв-03 22:41 
#!/usr/bin/perl
$str=<<"TEXT";
<h1> text text,
text  some text,
text
text
text text </h1>
TEXT
$tag="h1";
$str=~m/<$tag>(.*?)<\/$tag>/is;
print $1;

"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено RUSLAN , 08-Янв-03 21:34 
Спасибо большое! то что надо, токо этот код вытаскивает первое нахождение, а как вытащить все строки заключённые в тэги <h1> по всему документу ?



"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено Plus , 12-Янв-03 20:22 
>Спасибо большое! то что надо, токо этот код вытаскивает первое нахождение, а как вытащить все строки заключённые в тэги <h1> по всему документу ?


Добавь в конце регекспа модификатор g
Например
$tag="h1";
$str=~s/<$tag>(.*?)<\/$tag>/$1/sg;


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено RUSLAN , 13-Янв-03 13:41 
>Добавь в конце регекспа модификатор g
>Например
>$tag="h1";
>$str=~s/<$tag>(.*?)<\/$tag>/$1/sg;


Этот код удаляет тэги со всей строки, а надо что-бы забирался только текст
внутри тэга например <h1> .... </h1> !?


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено trdmitry , 17-Янв-03 15:47 
>>Добавь в конце регекспа модификатор g
>>Например
>>$tag="h1";
>>$str=~s/<$tag>(.*?)<\/$tag>/$1/sg;
>
>
>Этот код удаляет тэги со всей строки, а надо что-бы забирался только
>текст
>внутри тэга например <h1> .... </h1> !?


$str=~s/.*?<$tag>(.*?)<\/$tag>.*/$1/sg;


"RE: Регулярные выражения. Как вытащить текст из тэгов ?"
Отправлено RUSLAN , 01-Фев-03 17:47 
Может кому-то пригодится, самое правильно то это делается так:

undef $/;
open(G,"index.html");
$data=<G>;
close(G);
$/="\n";
$tag="h1";
while($data=~m/(<$tag>)(.*?)(<\/$tag>)/isg)
{
$h1=$2;
push(@mastags,$h1);
}
print  @mastags;


# Тема закрыта !