Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 20 Января 2008, 09:14:50

Название: регулярное выражение . . .
Отправлено: DartSidius от 20 Января 2008, 09:14:50
В общем есть такая задача . . . есть например в переменной некий текст . . . и если там есть $value;

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

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

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

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

как можно поправить?
Название: регулярное выражение . . .
Отправлено: ravshaniy от 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 от 22 Января 2008, 12:22:22
так что как можно поправить я не знаю, надеюсь у Вас все получится и жду что Вы не забудите сообщить о результате
Название: регулярное выражение . . .
Отправлено: DartSidius от 23 Января 2008, 09:06:17
2) ;{1,} - это избавляется от ошибок . . . т.е. если например будет $value;; -  поймет как $value;
3) \\$(.*?)\\;\' можно написать \'(\\$.*?)\\;\' . . . все понятно . . . ищется начало с $ . . .и для пункта 4 (.*?) . . . в твоем случае непонятно что найдет :)
4) я значение получаю не по ссылке . . . а по подмене \\$(.*?)\\;{1,}/$$1 :: (.*?) - $1
Название: регулярное выражение . . .
Отправлено: sd1074 от 23 Января 2008, 23:49:29
А такой вариант не подойдёт?

$page=~s/\\$(\\w*)\\;/$$1/g;
Название: регулярное выражение . . .
Отправлено: DartSidius от 26 Января 2008, 04:32:47
неа . . .
Название: регулярное выражение . . .
Отправлено: arto от 26 Января 2008, 10:30:55
так, 6 дней...

s#\\$(\\w+);+#$$1#ge
Название: регулярное выражение . . .
Отправлено: DartSidius от 09 Марта 2008, 08:29:43
Не арбайтен все равно :(
Название: регулярное выражение . . .
Отправлено: arto от 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