Regulärer Ausdruck zum extrahieren von JSON-array
Ich versuche, einen PCRE reguläre Ausdrücke zum extrahieren einige JSON. Ich bin mit einer version von MariaDB, die nicht über JSON-Funktionen, aber nicht REGEX-Funktionen.
Mein string ist:
{"device_types":["smartphone"],"isps":["a","B"],"network_types":[],"countries":[],"category":["Jebb","Bush"],"carriers":[],"exclude_carriers":[]}
Ich wollen, packen Sie den Inhalt category
. Ich würde gerne eine passende Gruppe, die enthält 2 items, Jebb
und Bush
(oder wie viele Elemente im array).
Habe ich versucht, dieses Muster, aber es entspricht nur das erste vorkommen: /(?<=category":\[).([^"]*).*?(?=\])/g
- Man fragt sich, warum Sie drängen JSON an die DB, wenn Sie benötigen Zugriff auf einige der zugrunde liegenden Inhalte in der DB selbst? Warum nicht schieben den Daten, die Sie tatsächlich benötigen?
- Eine business-intelligence-Art Wunder, das gleiche von seinem Entwickler-Freunde. Jede Hilfe bei der regex-Muster wäre toll!
- Möchten Sie vielleicht an diesem tag mit mariadb - es kann mehr über, wie du mit den Funktionen in diesem Kontext als die regex selbst
- Perl, PHP, JS, etc, etc, haben Routinen zum Parsen von JSON. Tun Sie es in der Anwendung code.
- Igitt, regex für JSON
- GGGforce Überprüfen Sie unten meine Antwort für ein einzelnes regex-Lösung zu Ihrem problem, Sie arbeiten völlig in Ordnung, für eine unbestimmte Anzahl von Einträgen.
- Ich werde @Redu, nur nach dem Mittagessen! 😉
- Ich bin der Annahme ClasGs Antwort, weil in MariaDB brauche ich 1 match mit diesen Gruppen statt mehrere übereinstimmungen. ClasG: regex101.com/r/jD1rN6/1 Redu: regex101.com/r/rU6nK8/1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Anzahl der Elemente im array begrenzt ist (und überschaubar), könnten Sie es mit einer endlichen Anzahl von optionalen items. Wie dieser mit maximal 5 Elemente:
regex101 Beispiel hier.
Grüße.
JSON nicht, eine reguläre Sprache. Da Sie es ermöglicht, beliebige Einbettung der balanced
Trennzeichen, es muss mindestens kontextfrei.
Betrachten Sie zum Beispiel ein array von arrays von arrays:
[ [ [ 1, 2], [2, 3] ] , [ [ 3, 4], [ 4, 5] ] ]
Klar Sie konnte nicht analysiert, die mit echten regulären Ausdrücken.
Siehe Dieses Thema:
Regex zum Parsen der einzelnen Schlüssel: Werte aus der JSON in Javascript
Vielleicht Hilfreich für Sie.
Tut dies, die Ihren Bedürfnissen entsprechen? Es sollte mit dem Kategorie-array, unabhängig von Ihrer Größe.
"category":(\[.*?\])
regex101 Beispiel
Gibt es viele Möglichkeiten. Eine schlampige Art und Weise, es zu tun ist
/([A-Z])\w+/g
Bitte versuchen Sie es auf Ihrer Konsole wie
OK das oben war ziemlich schlampig aber einen soliden single-regex-Lösung zu extrahieren, jedes einzelne element unabhängig von der Zahl, eins nach dem anderen und legen Sie Sie in einem array (res), ist die folgende...
Check it out @ http://regexr.com/3d4ee
OK, es tun können. Ich habe eine teuflische Idee. Wenn JS hatte look-behinds dies getan werden könnte, einfach durch die Umkehrung der angewandten Logik im vorherigen Beispiel, wo ich dazu benutzt hatte, einen Blick vorwärts. Ach, es gibt nicht... Also habe ich beschlossen, die Welt zu drehen die andere Weise herum. Check this out.
Nur Ihre Konsole verwenden, um zu bestätigen.
/[",]+(\w*)(?=[",\w]*"],"carriers)/g
categories
Feld sondern, was ist kurz vor dercarriers
Feld. @ClasG die Antwort, ist zwar nicht so dynamisch wie bei Ihnen, speziell packt diecategory
Feld. Ich kann nicht sicher seincategory
ist immer direkt vorcarriers
.category
also mein Ergebnisstring istcategory":["Jebb","Bush","Donald","Trump"],"carriers":["a","B"],"exclude_carriers":["a","B"]}
. Nun brauche ich einen Weg, um die Aufnahme zu beenden an der richtigen Stelle. Einige Variationen dieses:/[",]+(\w*)(?=[",\w]*"])/g
Mithilfe einer Reihe von non-capturing-group können Sie extrahieren Sie eine vordefinierte json array
regex Antwort:
(?:\"category\":)(?:\[)(.*)(?:\"\])
Dass die expression extrahieren
"category":["Jebb","Bush"]
, also auf die erste Gruppezum extrahieren von array -, sample-java-code: