Thread Regulärer Ausdruck matcht nicht korrekt - JSON (10 answers)
Opened by styx-cc at 2017-11-11 17:57

styx-cc
 2017-11-11 17:57
#187603 #187603
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo Community!

Ich versuche aneinandergereihte JSON-Datensaetze in einzelne aufzuteilen,
leider matcht mein Regex das nur teilweise korrekt und ich finde auch nach einiger Recherche und ausprobieren keine funktionierende Lösung.

Im Prinzip versuche ich, alle Folgen von [] einzufangen, denen ein weiteres [ oder nichts folgt.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use warnings;

my $string       = '[1,962,[["x",0,"0.1","1.106"]]][1,963,[["x",0,"0.663","0.0"]]]';
$string         .= '[1][1,562,[["x",0,"0.579","1.1"]]][1,563,[["x",0,"0.546","0.0"],["x",0,"0.94","1.8"]]]';

my @matches = ( $string =~ m/(\[.+?\])\[/g );

for (@matches) {
        print "$_\n";
}

__DATA__
Erhofft:
[1,962,[["x",0,"0.1","1.106"]]]
[1,963,[["x",0,"0.663","0.0"]]]
[1]
[1,562,[["x",0,"0.579","1.1"]]]
[1,563,[["x",0,"0.546","0.0"],["x",0,"0.94","1.8"]]]

Realitaet:
[1,962,[["x",0,"0.1","1.106"]]]
[["x",0,"0.663","0.0"]]]
[1,562,[["x",0,"0.579","1.1"]]]


Versucht habe ich verschiedene Varianten:

Code: (dl )
1
2
3
4
my @matches = ( $string =~ m/(\[.+\])\[/g );
my @matches = ( $string =~ m/(\[.+\])\[|/g );
my @matches = ( $string =~ m/(\[.+?\])\[|/g );
my @matches = ( $string =~ m/(\[.+?\])[\[|]/g );


Aber mein Umgang mit Regulaeren Ausdruecken haelt sich so sehr in Grenzen, dass ich erstmal sogar über Greedy & not Greedy gestolpert bin.

Kann mir bitte jemand erklären, wie ich zu einer Lösung komme und warum Zeile 8 so nicht funktioniert?

Müsste er nicht zumindest [1][1,562,[["x",0,"0.579","1.1"]]][... zwei mal matchen?

Lieben Gruß
Last edited: 2017-11-11 18:09:18 +0100 (CET)
Pörl.

View full thread Regulärer Ausdruck matcht nicht korrekt - JSON