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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.