Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

RegExp: Alle Einzelwerte aus einem String

Empfohlene Antworten

Hallo,

ich suche eine RegExp, mit der ich aus einem String


Name1 : 'Value1', Name2 : 2, Name3 : [ 1, '2', 3 ], Name4 : 'false', 

Name5 : { Sub1 : 'Subval1', Sub2 : 2, Sub3 : [ 4, '5', 6 ], Sub4 : 'false' }

alle Name:Value Paare rausbekommen kann.

Also Name1 : 'Value1' wäre so ein Paar. Aber auch Name3 : [1, '2', 3] oder aber Name5 : { Sub1 : 'Subval1', Sub2 : 2, Sub3 : [ 4, '5', 6 ], Sub4 : 'false' }

Das ganze mit php und ich denke preg_match_all mit der richtigen RegExp sollte mir da helfen können, oder?

Ok, Name5 ist dann schon wieder ein Extremfall. Wenn ich eine Möglichkeit hätte, alle anderen Werte zu bekommen würde mir das erstmal schon reichen.

Die die sowas kennen: Ja, ich will hier in PHP einen JSON-String auswerten und verarbeiten. Und nein, fertige C-Libraries sind keine Lösung. Auch die JSON_PHP Klassen helfen mir nicht, da die erstens nur ab PHP5 funktionieren und zweitens das auch nicht hinbekommen ;)

EDIT:

Eine bessere Überschrift ist mir nicht eingefallen ;)

Du nimmst einfach 3 Muster für die 3 Möglichkeiten.


$patternName = "Name\d+";

$patternSimpleNumber = "/(($patternName)\d+)),? /";
$patternSimpleString = "/(($patternName):'(.+?)'),? /";

$patternList = "/(($patternName)\[((\d+),)+\])),? /";

$patternComplex = "(($patternName):\{(.+?)\})"; // mit dem Wert den RegEx rekursiv anwenden
[/PHP]

Man das Ganze natürlich auch verkürzen, indem man lookahead-Expressions benutzt. Aber so (vom Prinzip her) sollte es funktionieren.

Prüfen tust du mit Hilfe der Funktion preg_match_all.

Name\d war nur ein Beispiel. Namen können alles sein, was den Namenskonventionen entspricht...

Hab jetzt mal folgende 3 RegEx:



// Name : Object

preg_match_all('/([a-z0-9]+) : ({.*})/i', input, $match)


// Name : Array

preg_match_all('/([a-z0-9]+) : (\\[.*\])/iU', input, $match)


// Name : Value

preg_match_all('/([a-z0-9]+) : (\'?[a-z0-9]+'?)/i', input, $match)


Damit kann ich sie ja immerhin schonmal entsprechend verkleinern. Allerdings passt "Name : Value" auch bei den Objekten (also Name5 im Beispiel). Gibt es eine Möglichkeit da eine Verneinung mit in die RegEx zu basteln? Also sowas wie:

/([a-z0-9]+) : [B](!{ )[/B](\'?[a-z0-9]+'?)/i'

Wenn ich das so mache findet er gar nichts mehr.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.