powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl regexp - Обратится к найденным результатам по номеру
5 сообщений из 5, страница 1 из 1
Perl regexp - Обратится к найденным результатам по номеру
    #38798657
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть регулярное выражение, которому соответствуют подстроки $1, $2 и т.д.
Как к ним можно обратится по индексу?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Perl regexp - Обратится к найденным результатам по номеру
    #38799077
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

1) сразу в массив
Код: php
1.
@result = m/$regex/g;



2) из под цикла while
Код: php
1.
2.
3.
4.
while (m/$regex/g) {

    $result[$i++] = $1;
}



3) можно по имени вместо индекса, используя именованные группы захвата
c синтаксисом(?<name>...) или (?'name'...) и хэш $+ для обращения к ним извне

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$fmt1 = '(?<y>\d\d\d\d)-(?<m>\d\d)-(?<d>\d\d)';
$fmt2 = '(?<m>\d\d)/(?<d>\d\d)/(?<y>\d\d\d\d)';
$fmt3 = '(?<d>\d\d)\.(?<m>\d\d)\.(?<y>\d\d\d\d)';

for my $d qw( 2006-10-21 15.01.2007 10/31/2005 ){
        if ( $d =~ m{$fmt1|$fmt2|$fmt3} ){
            print "day=$+{d} month=$+{m} year=$+{y}\n";
        }
}
...
Рейтинг: 0 / 0
Perl regexp - Обратится к найденным результатам по номеру
    #38799151
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чуть не забыл, ещё можно

4) через глобальные переменные @- и @+, которые содержат смещения соответственно начала и конца
каждого группового совпадения, т.е:

Код: php
1.
2.
3.
$1  - это  substr $_, $-[1], $+[1] - $-[1] if defined $-[1]
..
$n  - это  substr $_, $-[n], $+[n] - $-[n] if defined $-[n]



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$_ ="раз два три 4 5; вышел зайетс погулять";

m/(\w+) (\w+) (\w+)/;

for ( $n=1; $n <= $#-; ++$n ) {

    print $n, ". ",  substr( $_, $-[ $n ], $+[ $n ] - $-[ $n ] ), v10;
}



где в "$#-" лежит кол-во успешных совпадений
...
Рейтинг: 0 / 0
Perl regexp - Обратится к найденным результатам по номеру
    #38799178
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересный момент :


Код: powershell
1.
q/раз два три 4 5; вышел зайетс погулять/ =~ m/(\w+) (\w+) (\w+)/;



положит в
$1 --> раз ,
$2 --> два ,
$3 --> три ,

а не

$1--> вышел ,
$2--> зайетс ,
$3--> погулять

как я предполагал при составлении примера, памятуя о Жадности по умолчанию.
...
Рейтинг: 0 / 0
Perl regexp - Обратится к найденным результатам по номеру
    #38799201
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сделал немного по другому.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
my @matches = ($row =~ /$re/i);
if (@matches)
{
	my @fld = (...);
	foreach my $i (0..$#fld)
	{
		$data->{$fld[$i]} = $matches[$i];
	}
}
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl regexp - Обратится к найденным результатам по номеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]