Laden...

Regex - Text zwischen Zeichen checken?

Erstellt von moelski vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.908 Views
M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 11 Jahren
Regex - Text zwischen Zeichen checken?

Moins !

Ich versuche nun schon eine ganze Weile folgendes mit Regex zu lösen...

Gegen sei dieser String:

Node ID="CKDevice" State="Online" Status="OK"

Ich möchte folgendes Ergebnis erziehlen:

CKDevice

Mein Versuch war folgender:

ID=".*?"

Das führt aber zu dem Ergebnis:

ID="CKDevice"

Auch was ich z.b. bei stackoverflow gefunden habe löst das Problem nicht:
RegEx: Grabbing values between quotation marks
(Das trifft nicht ganz mein Problem, geht aber in die gleiche Richtung)

Kurzum, gibt es in Regex nicht die Möglichkeit das Match Ergebnis dahingehend zu beeinflussen Zeichen beim Ergebnis zu ignorieren?

Habe schon das Regex PDF hier aus dem Forum durchgeschaut, und auch die Suche bemüht. Konnte aber noch keine Lösung für mein Problem entdecken.
Und wie geschrieben ... die zahlreichen Hinweise auf stackoverflow haben mich auch nicht weiter gebracht.

Hoffe hier kann mir jemand den entscheidenden Kniff nennen 🤔

Greetz Dominik

1.378 Beiträge seit 2006
vor 11 Jahren

Du kannst mit () groupieren und mit ?<> kannst du einer Gruppe sogar einen Namen zuweisen also kannst du mit

ID="(.*?)"

eine Gruppe erstellen die du dann unter Match.Groups abfragen kannst.

Lg, XXX

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 11 Jahren

Hi xxxprod,

danke für die Info.
Ist das überhaupt ohne Gruppe lösbar ?

Greetz Dominik

5.742 Beiträge seit 2007
vor 11 Jahren

Ist das überhaupt ohne Gruppe lösbar ?

Ist dir eine Lösung mit Gruppe denn zu einfach?

Du kannst auch mit Lookbehinds- sowie Lookaheads anfangen; aber das wird tendenziell eher komplex.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo winSharp93,

nö, das ist auch nicht viel komplexer als mit einer Gruppe. Aus

x(y)z

wird

(?≤x)y(?=z)

Es ist nur unüblicher und daher für die meisten vielleicht ein bisschen schlechter zu verstehen. Allerdings kann es erforderlich sein, Lookarounds zu verwenden, nämlich wenn man irgendwo nur einen Pattern angeben kann (z.B. in einem Eingabefeld oder einer Konfigurationsdatei), ohne dass man Einfluss darauf hat, dass statt mit dem gesamten Match nur mit einer bestimmten Gruppe weitergearbeitet wird.

Hallo moelski, hallo xxxprod,

im konkreten Fall macht es keinen (großen) Unterschied, aber im allgemeinen ist es sicherer

ID="([^"]*)"

statt

ID="(.*?)"

zu verwenden, siehe RegEx kürzester Match [und die Gefahren von .*?].

herbivore

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 11 Jahren

Moins !

Es ist so wie herbivore sagt. Ich habe eine DB in der ich Regex speichern muss die automatisch ausgewertet werden. Ein "Durchforsten" der Gruppen ist in dem Fall leider nicht möglich (oder nur mit enormem Mehraufwand).

@herbivore: Ich werde das mal mit Look-Aheads versuchen. Wenn ich nicht weiterkomme würde ich mich nochmal melden.

Greetz Dominik