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