У меня есть строка, подобная приведенной ниже
То, что у вас есть, - это JSON с дополнительным храбростью до и после него.Поэтому вместо того, чтобы бороться с регулярными выражениями, лучше всего было бы извлечь фактический JSON, а затем использовать анализатор JSON для его обработки.Примерно так:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use JSON;
my $input = 'downCircuit received;TOKENS START;{"action":"UPDATE","device_id":"CP0027829","link_index":"101","name":"uplink101","description":"link1-0/0/3","priority":"200","status":"DOWN","wan_status":"DOWN","vlan":"4094","vlan_description":"vlan4094-intf","topic":"uplinks","stream_timestamp":"1547015547","aws_host":"attwifi-poc-central.arubathena.com","aws_timestamp":"1547015547","customer_id":"6666778917"};TOKENS END';
$input =~ s/.*START;//;
$input =~ s/;TOKENS END//;
my $data = JSON->new->decode($input);
say $data->{link_index};
Как и ожидалось, получится вывод 101
.
Примечание: Я думаю, что в вашем вопросе есть опечатка.По крайней мере, в JSON есть синтаксическая ошибка.Я удалил один непревзойденный символ кавычки, который у вас был до "UPDATE"
.