[perl, regexp] засплитить подстроку одним регэкспом невозможно?
$ perl -e 'print join( "..", split( /,/, ( "5,6 [1,2,3,4] 7,8" =~ /\[(.*)\]/ )[ 0 ] ) "\n";'
1..2..3..4
ладна, фиг с ним
мм? что смешного?
уж запистаь любое выражение в одну строку проблем не составит
ты бы еще предложил:
$tmp = ("5,6 [1,2,3,4] 7,8" =~ /\[(.*)\]/; @result = split /,/, $tmp;
типа тож в одну строку
а какая цель конечная?
от каких минусов этого решения тебе хочется избавиться? или просто академический интерес, как это сделать без split'а?
ты не писал, что надо "заменить следущий код на одну строку", не используя split.ты точно тему сообщения видишь?
Re: [perl, regexp] засплитить подстроку одним регэкспом невозможно?цель? ну изначально было чтобы красиво выглядело
потом возник спортивные интерес плюс чтобы лучше понимать как оно устроено
[xoft ~]$ perl -e '"5,6 [1,2,3,4] 7,8" =~ /\[(?:(\d+?{push @x, $1}?)+\]/; print "@x\n";'
1 2 3 4
?{...}а можно перловый код в заменах вызывать?
если можно то как?
например возведение всех чисел в строке в квадрат:
s/(\d+)/?{\1*\1}/g
если нельзя, то как покрасивше написать возведение в квадрат?
возиться с @+,@- ?
нашел
e — Evaluate 'replacement' as an expressionработает
s/(\d+)/$1*$1/eg
s/(\d+)/$1*$1/eg
за этот регексп на сайте http://perlmonks.org/ тебя не то что изнасилуют(это будет абсолютная и бесповоротная радость) - тебя там в перловый ад сошлют (а в перловом аде парсят хтмл-теги).
Оставить комментарий
pitrik2
я так понимаю что все они попадают в $1 и типа каждый следущий предыдущий затирает, поэтому на выводе токо один остается
может это как-то можно поправить?
может можно как-то по-другому в одну команду получить массив 1,2,3,4 из ентой строки?
т.е. изначально задача стоит типа так: заменить следущий код на одну строку