LINUX.ORG.RU

История изменений

Исправление perl5_guy, (текущая версия) :

#!/usr/bin/env perl

use v5.26;

my $s = '123 456 789 123';

say 'MATCHED!' if $s =~ /(\d{3}) (?1) (?1) \g1/;

Вот, браток, смотри чего есть. (?n) - это рекурсивные шаблончики. Т.е. на место этой конструкции, подставится шаблон из первой группы (группа - ограниченная скобками вещь). А \g1 - это взадссылка (backreference). Здесь на место метасимвола подставляется строка, которая совпала в первой группе (именно результат совпадения, а не шаблон). Т.е. «эквивалентно», что было понятней, можно переписать этот регвыр для данной строки как-то так: /\d{3} \d{3} \d{3} 123/

Учите Perl и не болейте, пацаны!

Исправление perl5_guy, :

#!/usr/bin/env perl

use v5.26;

my $s = '123 456 789 123';

say 'MATCHED!' if $s =~ /(\d{3}) (?1) (?1) \g1/;

Вот, браток, смотри чего есть. (?n) - это рекурсивные шаблончики. Т.е. на место этой конструкции, подставь шаблон из первой группы (группа - ограниченная скобками вещь). А \g1 - это взадссылка (backreference). Здесь на место метасимвола подставляется строка, которая совпала в первой группе (именно результат совпадения, а не шаблон). Т.е. «эквивалентно», что было понятней, можно переписать этот регвыр для данной строки как-то так: /\d{3} \d{3} \d{3} 123/

Учите Perl и не болейте, пацаны!

Исходная версия perl5_guy, :

#!/usr/bin/env perl

use v5.26;

my $s = '123 456 789 123';

say 'MATCHED!' if $s =~ /(\d{3}) (?1) (?1) \g1/;

Вот, браток, смотри чего есть. (?n) - это рекурсивные паттерны. Т.е. на место этой конструкции, подставь паттер из первой группы (группа - ограниченная скобками вещь). А \g1 - это бэкреференс. Здесь на место метасимвола подставляется строка, которая сматчилась в первой группе. Т.е. «эквивалентно» можно переписать этот регвыр для данной строки вот так: /\d{3} \d{3} \d{3} 123/

Учите Perl и не болейте, пацаны!