использование переменной в качестве параметра подстановки регулярных выражений - PullRequest
1 голос
/ 21 ноября 2011

Я занимался поиском и не нашел ответа.Почему это не работает?

    $self->{W_CONTENT} =~ /$regex/;
    print $1; #is there a value? YES
    $store{URL} =~ s/$param/$1/;

Да, $ 1 имеет значение.$ param заменяется, но заменяется ничем.Я уверен, что 1 доллар имеет ценность.Если я заменю на текст вместо "$ 1", он работает нормально.Пожалуйста помоги!

Ответы [ 2 ]

6 голосов
/ 21 ноября 2011

Чтобы $1 имел значение, вам нужно убедиться, что в $param есть круглые скобки ().то есть следующее имеет проблему, аналогичную той, которую вы объясняете.

my $fred = "Fred";
$fred =~ s/red/$1/;
# $fred will now be "F"

Но это работает

my $fred = "Fred";
$fred =~ s/r(ed)/$1/;
# $fred will now be "Fed"

Теперь, если вы хотите использовать $1 из вашего первого регулярного выражения ввторой вам нужно скопировать.Каждая оценка регулярного выражения сбрасывается $1 ... $&.Итак, вы хотите что-то вроде:

$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
my $old1 = $1;
$store{URL} =~ s/$param/$old1/;
1 голос
/ 21 ноября 2011

Обратные ссылки, такие как $ 1, не должны использоваться внутри выражения; вы бы использовали другую нотацию - для обзора посмотрите Perl Regular Expressions Quickstart .

Рассмотрите возможность получения значения $ 1 и сохранения его в другой переменной, , затем , используя это в регулярном выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...