(Gelöst) Regular Expression in data-part - andere Syntax?

Begonnen von somansch, 15 Juli 2017, 19:35:48

Vorheriges Thema - Nächstes Thema

somansch

Hallo,

ich habe folgenden String:Phone-5 (WLAN, 121 / 150 Mbit/s, -65)

Nun möchte ich die letzten drei Zeichen vor der abschliessenden Klammer bekommen, also "-65". Hierzu habe ich folgende RegEx erfolgreich in https://regex101.com getestet:
.{3}(?=\))

Wenn ich nun aber diese RegEx in Verbindung mit data-part verwenden möchte, bekomme ich keinen Wert zurück.
data-part=".{3}(?=\))"

Habe es auch schon mit .* davor und danach probiert...

Hat jemand eine Idee? Vielleicht ein Bug?

Danke im Voraus,
Andreas

amenomade

Du hast zwar ein Match, aber kein Capturing Group.

Probier mal z.B..*, (.*?)\)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

somansch


somansch

Durch Optimierung meines Codes, möchte ich auch die RegEx verbessern, da sie bei einigen Zeichenfolgen nicht funktioniert.

Hier die Zeichenfolge:
Phone-5 (WLAN, 121 / 150 Mbit/s, -65)

Als Ergebnis soll nach wie vor -65 erscheinen, jedoch soll die Logik der RegEx von vorn suchen. Also z.B. die vierte, fünfte und sechste Stelle nach dem zweiten "/"

Bin für jede Hilfe dankbar.

Danke und Gruß
Andreas

amenomade

Dann machst Du
- match / (musst Du escapen, dann => "\/")
- match alles, mehrmals
- match / (auch escapen)
Jetzt bist Du nach dem zweiten "/"
- match alles, 3 mal
- capturing group : match alles, 3 mal

regex101.com ist dein Freund

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

somansch

Habe jetzt mit Regex101.com ein funktionierendes Ergebnis (siehe Bild). Jedoch bleibt das Ergebnis im FTUI leer?! Irgendwie steig ich nicht dahinter  :'(

amenomade

Wenn ich mich richtig erinnere, baut data-part noch ^ am Anfang und $ am Ende der Regex. Deswegen sollte folgendes besser funktionieren:
.*\/...(...)\)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

somansch


amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus


amenomade

data-part baut ^ am Anfang und $ am Ende der Regex ein. Das heisst, deine Regex sieht dann in Wirklichkeit so aus:
^.*\/.*\/...(...)$

^ => assume beginning of string = was da gematcht wird muss am Anfang des Strings sitzen. Da Du .* matchest ist es egal. Alles passt.
aber
$ => assume end of string => das heisst konkret "/-48" am Ende des Strings. Das ist aber nicht der Fall, da Du noch ein ) am Ende hast: "-48)"

Deswegen in meiner Regex das \) noch am Ende
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

setstate

Zitatdata-part baut ^ am Anfang und $ am Ende der Regex ein.

Ich überlege mir jedes Mal, ob das so optimal ist oder ob man das lieber ohne Hinzufügen machen sollte.
Das es mit ^ am Anfang und $ am Ende machmal ein anderes Ergebnis liefert also ohne (gerade bei mehrzeiligen Strings) ist klar, aber das Hinzufügen von ^ am Anfang und $ am Ende sollte den Regex sicherer machen.
Mach es das, oder ist man dadurch unflexibler?

amenomade

Zitatdas Hinzufügen von ^ am Anfang und $ am Ende sollte den Regex sicherer machen.
Wieso?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus