Forum Webscript.Ru
Программирование => Perl => Тема начата: metton от 14 Октября 2004, 02:06:46
-
Как получить ВСЕ значения переменных вида ${NUMBER}, а не только последние? То есть, например, следующий код:
my @foo = "abcdefghijklmnopqrstuvwxyz"=~/((\\w)(\\w))+/;
print("@foo");
выдаёт "yz, y, z", а нужно чтобы, чтобы выдавал и предыдущие значения захватывающих скобок .
-
/((\\w)(\\w))/g
-
так, видимо, я не совсем правильно сформулировал задачу. вот так, думаю, будет правильнее:
my @foo = "abcdefghijklmnopqrstuvwxyz"=~/((\\w)(\\w))+\\w/;
print("@foo");
то есть, нужно именно с квантификатором
-
есть идеи?
-
metton
Зачем тебе кванитификатор???
чем тебя не устраивает это: /((\\w)(\\w))/g
Или я не совсем видимо правильно понял задачу...
-
commander,
просто выражение такого типа является подвыражением другого, более сложного, поэтому просто глобалом не получится - он относится ко всему выражению в целом
-
есть соображения по теме?
-
народ, так можно как-то сделать подобное с квантификатором?
-
Я не понимаю что именно тебе нужно сделать.
у тебя есть строка "abcdefghijklmnopqrstuvwxyz", что в массиве должно быть?
-
ОК, попробую объяснить ещё раз.
Если есть строка:
"abcdefghijklmnopqrstuvwxyz"
и герэксп:
/((\\w)(\\w))/g
То находится то что нужно.
А если строку чуть модифицировать:
"...abcdefghijklmnopqrstuvwxyz..."
и регэкспу тоже:
/\\.((\\w)(\\w))\\./g
То уже нет. Тут идёт привзяка к неким границам между которыми и нужно искать.
-
metton ты четко на вопросы отвечать умеешь?
Меня интересует ЧТО ТЫ ДОЛЖЕН ПОЛУЧИТЬ В МАССИВ.
-
("ab","a","b",
"cd","c","d"...)
-
metton:
"ab","a","b", "cd"
а \'bc\'?
-
нет, без "bc"
-
metton
Принципиально в одну строчку и одним регекспом?
-
metton
В принципе... IMHO надо смотреть в этом направлении:
my $var = \'...abcdefghijklmnopqrstuvwxyz...\';
my @array;
$var =~ /((\\w)(?{push @array, $&})(\\w))(?{push @array, $&})(?!)/x;
print join("\\n",@array);
вывод:
a
ab
b
bc
c
cd
d
de
e
ef
f
fg
g
gh
h
hi
....
Тебе не нужен каждый 4-й элемент, но все в твоих руках... ;)
[OFF]Нет времени, добивать до готового[/OFF]
-
Вариант без регекспов:
ну или почти без....
map {push @m, $_, split //, $_ } grep { /^\\w{2}$/ } split /(\\w{2})/, "...abcdefghijklmnopqrstuvwxyz...";
print $_."\\n" for (@m);
-
NeoNox
[OFF]Век живи - век учить, про круглые скобки в шаблоне split написано в последнем абзаце моей документации, который я благополучно не дочитал... теперь будем знать... а я мучался...[/OFF]