Thread Perl & RegEx (7 answers)
Opened by RalphFFM at 2020-02-01 17:50

haj
 2020-02-01 22:54
#191254 #191254
User since
2015-01-07
561 Artikel
BenutzerIn

user image
2020-02-01T16:50:23 RalphFFM
Code (perl): (dl )
1
2
@zahlen = $segmente =~ /"nodes": \[(?:\s+(\d+),?\n)+/g;
print Dumper \@zahlen;  # => klappt nicht. Wieso landet nur die erste Zahl im Array, und nicht alle?

Da hast Du Dich mit Deinen Testdaten selber aufs Glatteis geführt.
Es landet gar nicht die erste Zahl im Array, sondern die letzte. Die beiden sind bei Deinen Testdaten gleich, deswegen sieht man das nicht. Das kommt so:
  • Der /g-Modifier zieht nicht, denn "nodes": [ kommt nur einmal vor. Du bekommst also auf jeden Fall nur einen Match, mit oder ohne /g.
  • Mit der +-Wiederholung wendet Perl immer wieder die Regex in der Klammer an und überschreibt damit das Ergebnis der ersten Capture.

Du hast ja selbst schon eine Lösung gefunden, in der Du den Präfix abspaltest und dann den "wiederholbaren" Teil mit /g durchsuchst.

View full thread Perl & RegEx