Автор Тема: ПАМАГИТЕ ЧАЙНИКУ!!! (перл, регулярные выражения.)  (Прочитано 3451 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Кому не трудно помогите!
Есть текстовая строка произвольной длинны.
В ней переодически встречается следующая комбинация

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

то есть, между парой служебных слов идет описание произвольной длинны которое мне и нужно получить в чистом виде.
пары служебное_слово1 и служебное_слово2 по всей строке одинаковы. описание разное, произвольной длинны.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Так что нужно? в переменную занести все что между служебными словами? Какой формат служебных слов?
Подробнее. Примеры приветствуются.
The documentations is your friend

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

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
Примерно так:
« Ответ #3 : 15 Мая 2002, 12:50:37 »
$MyWordA = \'myc00lwordA\';
$MyWordB = \'myc00lwordB\';
$StringWithVariablesAndc00lWords = "тут твоя строка";
$StringWithVariablesAndc00lWords =~ s/.+($MyWordA)//g;
$StringWithVariablesAndc00lWords =~ s/($MyWordB)+.+//g;
print "$StringWithVariablesAndc00lWords ";
Debian/GNU Linux is rulezz...

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
SteelRat
Если использовать такой вариант, то вместо плюсов здесь:
Цитировать
=~ s/.+($MyWordA)//g;
и здесь:
Цитировать
.+//g;
нужно ставить * ;)
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
Да,
« Ответ #5 : 16 Мая 2002, 00:15:41 »
наверное...
Странно, я думал, что конструкция \'.+\' означает любую последовательность.... Покопаю доки. Хм.
Debian/GNU Linux is rulezz...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
$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

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Green Kakadu
Цитировать
if ($text=~/$stop1(.*?)$stop2/){$spec_var=$1;}

А это можно записать короче:
$spec_var=($text=~/$stop1(.*?)$stop2/)[0]; ;)
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
И всё-таки.
« Ответ #8 : 16 Мая 2002, 12:25:28 »
\'.+\' означает любую последовательность. => Мой метод рабочий.
Но и звезда тоже вполне могла бы удовлетворить.
Debian/GNU Linux is rulezz...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Цитировать
.+\' означает любую последовательность. => Мой метод рабочий.

не-а.

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

это означает, что у тебя не работает, если б сразу все шло со служебного слова ;) потому как нужен хоть один символ до него
 в исканиях.

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
ааа
« Ответ #10 : 16 Мая 2002, 14:54:09 »
да, я считал стоку вида XXXXmyc00lwordADATAmyc00lwordBXXX.
Debian/GNU Linux is rulezz...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28