Forum Webscript.Ru

Программирование => Perl => Тема начата: metton от 14 Октября 2004, 02:06:46

Название: Значения скобок в регулярных выражениях
Отправлено: metton от 14 Октября 2004, 02:06:46
Как получить ВСЕ значения переменных вида ${NUMBER}, а не только последние? То есть, например, следующий код:

my @foo = "abcdefghijklmnopqrstuvwxyz"=~/((\\w)(\\w))+/;
print("@foo");

выдаёт "yz, y, z", а нужно чтобы, чтобы выдавал и предыдущие значения захватывающих скобок .
Название: Значения скобок в регулярных выражениях
Отправлено: Wyclef от 14 Октября 2004, 04:12:36
/((\\w)(\\w))/g
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 14 Октября 2004, 13:38:54
так, видимо, я не совсем правильно сформулировал задачу. вот так, думаю, будет правильнее:

my @foo = "abcdefghijklmnopqrstuvwxyz"=~/((\\w)(\\w))+\\w/;
print("@foo");

то есть, нужно именно с квантификатором
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 22 Октября 2004, 01:18:11
есть идеи?
Название: Значения скобок в регулярных выражениях
Отправлено: commander от 22 Октября 2004, 10:20:57
metton
Зачем тебе кванитификатор???
чем тебя не устраивает это: /((\\w)(\\w))/g
Или я не совсем видимо правильно понял задачу...
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 22 Октября 2004, 11:46:30
commander,
просто выражение такого типа является подвыражением другого, более сложного, поэтому просто глобалом не получится - он относится ко всему выражению в целом
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 23 Октября 2004, 22:40:08
есть соображения по теме?
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 03 Ноября 2004, 18:52:20
народ, так можно как-то сделать подобное с квантификатором?
Название: Значения скобок в регулярных выражениях
Отправлено: NeoNox от 03 Ноября 2004, 19:49:56
Я не понимаю что именно тебе нужно сделать.
у тебя есть строка "abcdefghijklmnopqrstuvwxyz", что в массиве должно быть?
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 03 Ноября 2004, 20:21:18
ОК, попробую объяснить ещё раз.
Если есть строка:
"abcdefghijklmnopqrstuvwxyz"
и герэксп:
/((\\w)(\\w))/g
То находится то что нужно.

А если строку чуть модифицировать:
"...abcdefghijklmnopqrstuvwxyz..."
и регэкспу тоже:
/\\.((\\w)(\\w))\\./g
То уже нет. Тут идёт привзяка к неким границам между которыми и нужно искать.
Название: Значения скобок в регулярных выражениях
Отправлено: NeoNox от 03 Ноября 2004, 20:41:51
metton ты четко на вопросы отвечать умеешь?
Меня интересует ЧТО ТЫ ДОЛЖЕН ПОЛУЧИТЬ В МАССИВ.
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 03 Ноября 2004, 20:57:54
("ab","a","b",
"cd","c","d"...)
Название: Значения скобок в регулярных выражениях
Отправлено: Green Kakadu от 03 Ноября 2004, 21:57:25
Цитировать
metton:
"ab","a","b", "cd"

а \'bc\'?
Название: Значения скобок в регулярных выражениях
Отправлено: metton от 03 Ноября 2004, 22:04:15
нет, без "bc"
Название: Значения скобок в регулярных выражениях
Отправлено: Wyclef от 04 Ноября 2004, 03:37:08
metton
Принципиально в одну строчку и одним регекспом?
Название: Значения скобок в регулярных выражениях
Отправлено: Phoinix от 04 Ноября 2004, 12:25:50
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]
Название: Значения скобок в регулярных выражениях
Отправлено: NeoNox от 04 Ноября 2004, 12:34:41
Вариант без регекспов:
ну или почти без....
Цитировать

map {push @m, $_, split //, $_ } grep { /^\\w{2}$/ } split /(\\w{2})/, "...abcdefghijklmnopqrstuvwxyz...";
print $_."\\n" for (@m);
Название: Значения скобок в регулярных выражениях
Отправлено: Phoinix от 04 Ноября 2004, 13:29:05
NeoNox
[OFF]Век живи - век учить, про круглые скобки в шаблоне split написано в последнем абзаце моей документации, который я благополучно не дочитал... теперь будем знать... а я мучался...[/OFF]