Laden...

Zeile durch RegEx matchen

Erstellt von Fabian vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.000 Views
Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren
Zeile durch RegEx matchen

Guten Morgen,

ich habe da ein RegEx-Problem, dass ich dummerweise nicht gelöst bekomme, obwohl ich mir vorstellen kann, dass es gar nicht so schwer ist.

Folgende Zeile habe ich in einer Datei:


(B   88 root      15   0     0    0    0 S  0.0  0.0   0:00.03 pdflush            (B

Der Benutzer des Skripts (es ist Perl 🙂), darf jetzt das Kommando eingeben, nach dem er suchen möchte (ist in diesem Fall pdflush) und dann soll die Prozess-ID (in diesem Fall die 88 ganz am Anfang) ausgegeben werden.

Mein RegEx sah bis jetzt so aus:


(\\d+).pdflush

Leider matched er dann auf die 3, die direkt links neben pdflush steht. Ich habe gerade überhaupt keine Idee, wie ich das matchen könnte.

Könnt ihr mir helfen?

Danke und Gruß,
Fabian

P.S.: Der RegEx ist hier ausreichend, da ich Perl benutzen muss und mir die C# Klassen ja nicht weiterhelfen 🙂 (bzw. mir auch bekannt sind).

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Fabian,

tja, ist immer die Frage, worauf man sich verlassen kann.

Wenn die PID sicher immer die erste Zahl in der Zeile ist, dann z.B. mit

^[\d]*\d+.*pdfflush

Wenn die PID immer in Spalte 11 beginnt (was unwahrscheinlich ist), dann z.B. mit

^.(10)\d+.*pdfflush

herbivore

Fabian Themenstarter:in
1.985 Beiträge seit 2004
vor 18 Jahren

Original von herbivore
Hallo Fabian,

tja, ist immer die Frage, worauf man sich verlassen kann.

Wenn die PID sicher immer die erste Zahl in der Zeile ist, dann z.B. mit

^[\d]*\d+.*pdfflush

Wenn die PID immer in Spalte 11 beginnt (was unwahrscheinlich ist), dann z.B. mit

^.(10)\d+.*pdfflush

herbivore

Hallo herbivore,

danke für Deine Hilfe! Ich hab es jetzt mit folgendem RegEx gemacht:

([\d]*\d+).*pdflush

Das matched genau auf die PID und stellt mir das Ergebnis als Gruppe 1 zur Verfügung.

Eine Frage habe ich jetzt aber noch an Dich: Kannst Du mir das [\d]*\d+ erklären? Was \d bzw. \d+ bedeutet ist klar, aber warum zweimal und mit dem *? So ganz versteh ichs noch nicht.

Danke und Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Fabian,

sorry, war ein Fehler. sollte

[\d]*\d+.*pdfflush

heißen, bzw.

[\d]*(\d+).*pdfflush

um an die PID zu kommen.

herbivore