Автор Тема: регулярное выражение . . .  (Прочитано 5483 раз)

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

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« : 20 Января 2008, 09:14:50 »
В общем есть такая задача . . . есть например в переменной некий текст . . . и если там есть $value;

например, то заменять его на соответствующее значение переменной . . . работает щяс так .:

$page=~s/\\$(.*?)\\;{1,}/$$1/g;

если переменные есть в тексте,но они не на одной строчке, то все заменяется ок . . .а если такой, например вариант: $value1;/imgs/$value_ttl;

, то ищется почему то переменная "value1;/imgs/$value_ttl"

как можно поправить?

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #1 : 22 Января 2008, 12:16:25 »
вчера сломал себе мозг над этой задачей.

во-первых: тест регулярного выражения показывает что регулярное выражение /\\$(.*?)\\;{1,}/g в поиске по строке $value1;/imgs/$value_ttl; в любом случае найдет \'value1\' \'value_ttl\'
my $page = \'$value1;/imgs/$value_ttl;\';
my @a = $page=~m/\\$(.*?)\\;/g;
print $_,"\\n" foreach @a;


во-вторых: в регулярном выражении не понятно зачем \'{1,}\' можно обойтись без нее

в-третьих: в регулярном выражении не понятно почему \'\\$(.*?)\\;\' можно написать \'(\\$.*?)\\;\'

в-четвертых: у меня ниразу не получилось получить значение по ссылке :
use Data:: Dumper;

my $value2 = "значение ссылки";
my $value1 = \\$value2;
my $value3 = "value2";

print Dumper ( $$value1, $$value3);


получаю:

$VAR1 = \'значение ссылки\';
$VAR2 = undef;


и при условии "use strict;" получаю сообщение :

#!/usr/local/bin/perl
use strict;
use Data:: Dumper;

my $value2 = "значение ссылки";
my $value1 = \\$value2;
my $value3 = "value2";

print Dumper ( $$value1, $$value3);


получаю:

Can\'t use string ("value2") as a SCALAR ref while "strict refs" in use
убили кенни, сволочи

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #2 : 22 Января 2008, 12:22:22 »
так что как можно поправить я не знаю, надеюсь у Вас все получится и жду что Вы не забудите сообщить о результате
убили кенни, сволочи

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #3 : 23 Января 2008, 09:06:17 »
2) ;{1,} - это избавляется от ошибок . . . т.е. если например будет $value;; -  поймет как $value;
3) \\$(.*?)\\;\' можно написать \'(\\$.*?)\\;\' . . . все понятно . . . ищется начало с $ . . .и для пункта 4 (.*?) . . . в твоем случае непонятно что найдет :)
4) я значение получаю не по ссылке . . . а по подмене \\$(.*?)\\;{1,}/$$1 :: (.*?) - $1

Оффлайн sd1074

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 40
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #4 : 23 Января 2008, 23:49:29 »
А такой вариант не подойдёт?

$page=~s/\\$(\\w*)\\;/$$1/g;

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #5 : 26 Января 2008, 04:32:47 »
неа . . .

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
регулярное выражение . . .
« Ответ #6 : 26 Января 2008, 10:30:55 »
так, 6 дней...

s#\\$(\\w+);+#$$1#ge

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
регулярное выражение . . .
« Ответ #7 : 09 Марта 2008, 08:29:43 »
Не арбайтен все равно :(

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
регулярное выражение . . .
« Ответ #8 : 09 Марта 2008, 09:39:29 »
DB<1> $a = q|test $test test2|
DB<2> $test = "ValuE"
DB<3> $a =~ s#\\$(\\w+)#$$1#ge
DB<4> p $a
test ValuE test2

 

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