Mehrere Begrenzungszeichen mit Perl aufteilen

517
user3834663

Ich versuche, nur den FREE HEAP-Zählwert (1400) aus der unteren Zeile zu extrahieren. Hier verwende ich die Split-Funktion zweimal, um den Wert zu erhalten. Kann mir jemand helfen, eine einzelne Regex zu bekommen, die hier den Wert 1400 mithilfe der Split-Funktion extrahieren würde.

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

Eingabezeichenfolge:

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] 

Ausgabe:

1400 
0

1 Antwort auf die Frage

0
Toto

Warum möchtest du split verwenden? Match ist hier bequemer:

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"; 

Ausgabe:

1400 
Diese Regex würde jedoch sowohl für den freien als auch für den freien Heap zählen user3834663 vor 7 Jahren 0
bedeutet 1400 und 52.2 richtig? user3834663 vor 7 Jahren 0
@ user3834663: Sorry, ich verstehe dich nicht. Möchten Sie nur `1400` oder alle Werte erhalten, die nach` FREE: `sind? Toto vor 7 Jahren 0
Ich brauche nur den HEAP FREE-Zählwert, der 1400 ist, und NON HEAP FREE-Wert, der 52,2 ist user3834663 vor 7 Jahren 0
Ich muss auch übereinstimmen, wenn der freie Zähler Dezimalwerte hat, beispielsweise 1400.1 user3834663 vor 7 Jahren 0
@ user3834663: Siehe meine Bearbeitung. Toto vor 7 Jahren 0
Entschuldigung, aber das entspricht immer noch 1400 und 52,2 user3834663 vor 7 Jahren 0
@ user3834663: Nein, das stimmt nicht. Wie verwenden Sie den obigen Code? Bearbeiten Sie Ihre Frage und fügen Sie weiteren Kontext hinzu. Das Beispielskript gab ich nur "1400" aus Toto vor 7 Jahren 0