Forum Webscript.Ru

Программирование => Perl => Тема начата: от 15 Мая 2002, 10:41:05

Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: от 15 Мая 2002, 10:41:05
Кому не трудно помогите!
Есть текстовая строка произвольной длинны.
В ней переодически встречается следующая комбинация

служебное_слово1    описание произвольной длинны    служебное_слово2

то есть, между парой служебных слов идет описание произвольной длинны которое мне и нужно получить в чистом виде.
пары служебное_слово1 и служебное_слово2 по всей строке одинаковы. описание разное, произвольной длинны.
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: NeoNox от 15 Мая 2002, 11:20:48
Так что нужно? в переменную занести все что между служебными словами? Какой формат служебных слов?
Подробнее. Примеры приветствуются.
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: от 15 Мая 2002, 12:13:48
Уже подсказали. Сорри за беспокойство.
Название: Примерно так:
Отправлено: SteelRat от 15 Мая 2002, 12:50:37
$MyWordA = \'myc00lwordA\';
$MyWordB = \'myc00lwordB\';
$StringWithVariablesAndc00lWords = "тут твоя строка";
$StringWithVariablesAndc00lWords =~ s/.+($MyWordA)//g;
$StringWithVariablesAndc00lWords =~ s/($MyWordB)+.+//g;
print "$StringWithVariablesAndc00lWords ";
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: YA от 15 Мая 2002, 22:46:27
SteelRat
Если использовать такой вариант, то вместо плюсов здесь:
Цитировать
=~ s/.+($MyWordA)//g;
и здесь:
Цитировать
.+//g;
нужно ставить * ;)
Название: Да,
Отправлено: SteelRat от 16 Мая 2002, 00:15:41
наверное...
Странно, я думал, что конструкция \'.+\' означает любую последовательность.... Покопаю доки. Хм.
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: Green Kakadu от 16 Мая 2002, 02:37:09
$stop1=\'lala\';
$stop2=\'toto\';
if ($text=~/$stop1(.*?)$stop2/){$spec_var=$1;}

Если же в строке планируется несколько таких комбинаций со служ. словами, то можно так:

$stop1=\'lala\';
$stop2=\'toto\';
while ($text=~/$stop1(.*?)$stop2/g){(push @spec_vars, $1);}
ну а потом разобраться с массивом @spec_vars


Цитировать
Уже подсказали. Сорри за беспокойство.

;) а мы тоже не жадины какие-нибудь!
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: YA от 16 Мая 2002, 08:21:20
Green Kakadu
Цитировать
if ($text=~/$stop1(.*?)$stop2/){$spec_var=$1;}

А это можно записать короче:
$spec_var=($text=~/$stop1(.*?)$stop2/)[0]; ;)
Название: И всё-таки.
Отправлено: SteelRat от 16 Мая 2002, 12:25:28
\'.+\' означает любую последовательность. => Мой метод рабочий.
Но и звезда тоже вполне могла бы удовлетворить.
Название: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)
Отправлено: Green Kakadu от 16 Мая 2002, 12:41:21
Цитировать
.+\' означает любую последовательность. => Мой метод рабочий.

не-а.

Цитировать
$StringWithVariablesAndc00lWords =~ s/.+($MyWordA)//g;

это означает, что у тебя не работает, если б сразу все шло со служебного слова ;) потому как нужен хоть один символ до него
Название: ааа
Отправлено: SteelRat от 16 Мая 2002, 14:54:09
да, я считал стоку вида XXXXmyc00lwordADATAmyc00lwordBXXX.