Forum Webscript.Ru
Программирование => Perl => Тема начата: DartSidius от 20 Января 2008, 09:14:50
-
В общем есть такая задача . . . есть например в переменной некий текст . . . и если там есть $value;
например, то заменять его на соответствующее значение переменной . . . работает щяс так .:
$page=~s/\\$(.*?)\\;{1,}/$$1/g;
если переменные есть в тексте,но они не на одной строчке, то все заменяется ок . . .а если такой, например вариант: $value1;/imgs/$value_ttl;
, то ищется почему то переменная "value1;/imgs/$value_ttl"
как можно поправить?
-
вчера сломал себе мозг над этой задачей.
во-первых: тест регулярного выражения показывает что регулярное выражение /\\$(.*?)\\;{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
-
так что как можно поправить я не знаю, надеюсь у Вас все получится и жду что Вы не забудите сообщить о результате
-
2) ;{1,} - это избавляется от ошибок . . . т.е. если например будет $value;; - поймет как $value;
3) \\$(.*?)\\;\' можно написать \'(\\$.*?)\\;\' . . . все понятно . . . ищется начало с $ . . .и для пункта 4 (.*?) . . . в твоем случае непонятно что найдет :)
4) я значение получаю не по ссылке . . . а по подмене \\$(.*?)\\;{1,}/$$1 :: (.*?) - $1
-
А такой вариант не подойдёт?
$page=~s/\\$(\\w*)\\;/$$1/g;
-
неа . . .
-
так, 6 дней...
s#\\$(\\w+);+#$$1#ge
-
Не арбайтен все равно :(
-
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