111111111
111111111111111111111222222222
111111111111111111111(.*?)1(.*?)<\\/p>/
$1$d$2<\\/p>/) {}; (где $d=2) то получим следующее:
111111
222222222
222222222222111111111[^(<\\/p>)]*?)(1)/$1$d/) {}; то получим слдующее:
111111
222211111
111111111111111111111Я знаю как сказать "Любая последовательность символов, в которой нет указанных символов" с помощью [^abcd].
И мне нужно не просто определить, есть ли указанная подпоследовательность в данной строке ...
113451111111
111111111111111111111223452222222
111111111111111111111sub change{
my $i=1;
my %tag;
while ($_[0]=~s/(.*?<\\/p>)/\\x07$i/s) {
$tag{$i}=$1;
$tag{$i}=~s/1/2/g;
$i++;
}
while ($i>1) {
$i--;
$_[0]=~s/\\x07$i/$tag{$i}/g;
}
}
my $a=\'111111
113451111111
111111111111111111111\';
print $a."\\n";
change($a);
print $a;
my $str = "111111113451111111
111111111111111111111";
$str =~ s/()(.*?)(<\\/p>)/local($1,$2,$3);$1=~s?1?2?g; $1.$2.$3/ge;
print $str;
my $str = "111111113451111111
111111111111111111111";
$str =~ s/()(.*?)(<\\/p>)/local($1,$2,$3);$2=~s?1?2?g; $1.$2.$3/ge;
print $str;
my $str = "111111113451111111
111111111111111111
112341211";
print $str."\\n";
$str =~ s/()(.*?)(<\\/p>)/my ($a,$b,$c)=($1,$2,$3);$b=~s?1?2?g;$a.$b.$c/ge;
print $str;
Vladn:
что приводит к перезаписи $1 $2 и $3, точнее - записи в них пустых значений
А вот это вообще не понял. Почему пустых?
sub change{
my $i=1;
my %coms;
while ($_[0]=~s/(<\\!--(.*?)-->)/\\x07$i/s) {
$coms{$i}=$1;
$i++;
}
$_[0]=~s/\\&/\\&/g;
while ($i>1) {
$i--;
$_[0]=~s/\\x07$i/$coms{$i}/;
}
}
Т.е. сначала удаляем комментарии, затем заменяем амперсанты, затем восстанавливаем комментарии.
После каждой операции =~s/// или =~/// переменные $1, $2 и т.д. обновляются в соответствии с этой операцией
более красивое решение
Красивое?
var [Красивое] = 1 строчка;
var [Более красивое] = меньше строчек OR более эффективное, чем менее красивое;