Программирование > Perl

регулярное выражение . . .

(1/2) > >>

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;

Навигация

[0] Главная страница сообщений

[#] Следующая страница

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 
Перейти к полной версии