membagi beberapa pembatas menggunakan perl

0

Saya mencoba untuk mengekstrak hanya nilai hitungan HEAP GRATIS yang 1400 dari baris di bawah ini. Di sini saya menggunakan fungsi split dua kali untuk mendapatkan nilai. Adakah yang bisa membantu saya mendapatkan regex tunggal yang akan mengekstrak nilai 1400 menggunakan fungsi split di sini.

my @split_val = split(',',$line);
print $split_val[2];
my @split_val1= split(':',$split_val[2]); 

String input:

2014-04-23 14:66:87,666 INFO  - HEAP - [USAGE: 1948.3, FREE: 1400, MAX: 3597.5]; NON-HEAP - [USAGE: 611.9, FREE: 52.2, MAX: 1776.0]; CLASSES - [Loaded: 67007, Unloaded: 3237, Left: 63770]; THREADS - [Count: 342]

keluaran:

1400
user3834663
sumber

Jawaban:

0

Mengapa Anda ingin menggunakan split? pertandingan lebih nyaman di sini:

my $str = '2014-04-23 14:66:87,666 INFO  - HEAP - [USAGE: 1948.3, FREE: 1400, MAX: 3597.5]; NON-HEAP - [USAGE: 611.9, FREE: 52.2, MAX: 1776.0]; CLASSES - [Loaded: 67007, Unloaded: 3237, Left: 63770]; THREADS - [Count: 342]';
my ($freeValue) = $str =~ /(?<=FREE: )(\d+(?:\.\d+)?)/;
print $freeValue,"\n";

Keluaran:

1400
Toto
sumber
tetapi regex ini akan cocok dengan hitungan bebas untuk heap dan non heap
user3834663
berarti 1400 dan 52.2 benar?
user3834663
@ user3834663: Maaf, saya tidak mengerti Anda. Apakah Anda ingin mendapatkan hanya 1400atau semua nilai setelahnya FREE:?
Toto
Saya hanya perlu mendapatkan nilai penghitungan HEAP FREE yang 1400 bukan nilai NON HEAP FREE yang 52,2
user3834663
Juga saya harus mencocokkan jika hitungan bebas memiliki nilai desimal contoh 1400.1
user3834663