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

Исходное сообщение
"Помогите с регулярными выражениями плииз"

Отправлено karlson , 14-Апр-06 10:42 
есть строка вида
<h1>blalbla</h1>

как из нее выдрать текст, заключенный между тегами?
в данном случае blabla.

делаю так: /$^<h1\|H1>[~<]*<\/h1\|H1>/

но не работает.


Содержание

Сообщения в этом обсуждении
"Помогите с регулярными выражениями плииз"
Отправлено madskull , 14-Апр-06 11:03 
>есть строка вида
><h1>blalbla</h1>
>
>как из нее выдрать текст, заключенный между тегами?
>в данном случае blabla.
>
>делаю так: /$^<h1\|H1>[~<]*<\/h1\|H1>/
>
>но не работает.

И не будет. Возьмите какой-нибудь талмуд по регекспам и посмотрите, что Вы написали.
Зачем "$" в начале? Как, по Вашему, обработчик должен понимать "\|" ?

В Вашем случае все просто (если имеются в виду регекспы в перле):
/<h1>(.+?)<\/h1>/i
в $1 - найденный текст


"Помогите с регулярными выражениями плииз"
Отправлено MTHawk , 14-Апр-06 11:10 
>есть строка вида
><h1>blalbla</h1>
>
>как из нее выдрать текст, заключенный между тегами?
>в данном случае blabla.
>
>делаю так: /$^<h1\|H1>[~<]*<\/h1\|H1>/
>
>но не работает.

Зачем $ в начале регекспа? Это символ конца строки. Это раз.
[~<] - Очевидно подразумавалось все символы кроме <.
Тогда это должно выглядеть так [^<] - множество полученное отрицанием. Но вдруг в тексте появится символ < несущий смысловую нагрузку? это два.
Если вы хотите использовать альтернативу  - ее нужно заключать в круглые скобки
(h|H), но в данном случае это нерационально, поскольку есть ключ i дающий регистронезависимость. это три.
Что бы "выдрать текст" его тоже нужно заключать в круглые скобки. это четыре.
Итак мы получаем.
/^<h1>(.+)/<\/h1>/i;
Если текст нужно достать с начала строки.
Значение в круглых скобках будет находится в переменной $1
Но можно его забрать из регекспа в одну строку.

$string='<h1>blalbla</h1>';
($text)=$string~=/^<h1>(.+)/<\/h1>/i;


"Помогите с регулярными выражениями плииз"
Отправлено karlson , 14-Апр-06 11:22 
я просто полный ноль в перле..
но удалось сделать вот так:

#!/usr/bin/perl
$text = "уыв<h1> hello </h1>ывы <h2>vtoraja stroka</h2>";

$text =~ /<(\w*?).*?>(.*?)<\/\1>/;

print $2;

он выдает hello

но как сделать чтобы выводилось
hello
vtoraja stroka


"Помогите с регулярными выражениями плииз"
Отправлено karlson , 14-Апр-06 11:36 
>я просто полный ноль в перле..
>но удалось сделать вот так:
>
>#!/usr/bin/perl
>$text = "уыв<h1> hello </h1>ывы <h2>vtoraja stroka</h2>";
>
>$text =~ /<(\w*?).*?>(.*?)<\/\1>/;
>
>print $2;
>
>он выдает hello
>
>но как сделать чтобы выводилось
>hello
>vtoraja stroka


сделал так
#!/usr/bin/perl

$text = "уыв<H1> hello </H1>ывы <h2>vtoraja stroka</h2> <h3> tretja stroka </h3>";
#$text =~ /\<h[1-6]\>(.+)\<\/h[1-6]\>/;

while ($text =~ /<(\w*?).*?>(.*?)<\/\1>/g)
{

print "$2\n";

}

спасибо всем кто помог