2015-09-03 3 views
1

$ строка = «BLAH1234 хуг BALH3214 xxyyzz BALH3452»Perl регулярное выражение захвата нескольких экземпляров

Я хочу, чтобы захватить все экземпляры 4 заглавных букв подряд следуют 4 номера.

Я сделал: $line =~ /([A-Z]{4}[0-9]{4})/g, но я могу только захватить первый экземпляр. Когда я делаю $ 2, он говорит, что он неинициализирован.

Как я могу захватить все экземпляры?

ответ

1
my @matches = $string =~ /[A-Z]{4}\d{4}/g; 
+1

Думайте, что это может выиграть от небольшого расширения - ясно, что 'g' возвращает список. – Sobrique

0

Дано:

$ echo "$tgt" 
"BLAH1234 xyz BALH3214 xxyyzz BALH3452" 

Вы можете сделать:

$ echo "$tgt" | perl -lne 'print join("|", /[A-Z]{4}\d{4}/g)' 
BLAH1234|BALH3214|BALH3452 

Или более явно:

my $line="BLAH1234 xyz BALH3214 xxyyzz BALH3452"; 
for ($line=~/[A-Z]{4}\d{4}/g) { 
    print "$_\n"; 
} 

глобальная находка возвращает список.

Смежные вопросы