Изменение границы слова

В настоящее время у меня есть следующее:

$_[0] =~ s/***regex here***(*SKIP)(*F)|\b($concatenated_variables)\b/\$$1/g;

$concatenated_variables содержит имена переменных, разделенные символом | ,

Это отлично работает ИСКЛЮЧЕНИЕ, я не хочу, чтобы подстановка возникала, если совпадение, найденное с помощью \b($concatenated_variables)\b уже имеет перед ним значение $.

Например:

$concatenated_variables = count|a|var3

$_[0] = for count in range(3): print count; print "hello"; ++a

Если я использую:

$_[0] =~ s/(?:['"](?:[^'"]*?(?:\\")*)*["'])(*SKIP)(*F)|(?<!--\$)($concatenated_variables)\b/\$$1/g;
</code-->
<p> Я получил:</p> <pre class="prettyprint linenums">for coun$t in range(3): prin$t coun$t; prin$t "yayay"; ++$a</pre> <p> тогда как я должен получить:</p> <pre class="prettyprint linenums">for $count in range(3): print $count; print "yayay"; ++$a</pre> <p> Есть ли способ достичь этого?</p> <p> Спасибо за вашу помощь.</p>
1 ответ

Использование:

$concatenated_variables = qr/(?<!--\$)(var1|var2|var3)/;
</code-->

licensed under cc by-sa 3.0 with attribution.