Seite 1 von 1

REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 29.03.2020 14:51
von mad-manne
Hallo zusammen,
ich bin ja durchaus lernfähig, aber REGEX ist mir nach wie vor zu hoch und ich fürchte das wird sich auch nie ändern :-?

Hier sind mal Beispieldaten meines aktuellen Problem:

Code: Alles auswählen

MEINE URSPRUNGSDATEN
{4}Aufgabe 1:Einkaufen
Aufgabe 2:Kochen
{39}Aufgabe 3:Essen
{13}Aufgabe 4:Geschirr waschen
Für jede dieser Zeilen, die ich in einer Schleife(OHNE REGEX) durcharbeiten werde möchte ich ein Array mit folgenden Daten zurückhaben:

Code: Alles auswählen

ID  = beliebig lange GANZE Zahl, die zwischen den geschweiften Klammern(die ganz am Anfang des Strings stehen) steht ... 
oder 0/leer wenn es gar keinen Abschnitt mit geschweiften Klammern am Anfang gibt

AUFGABENTEXT = Der Aufgabentext soll dann alles enthalten, was nach der schliessenden geschweiften Klammer steht ...
und das auch, wenn wie hier im Beispiel auf Zeile 2 gar kein Abschnitt mit geschweiften Klammern vorhanden ist
Mein Ergebniss sollte also so aussehen:

Code: Alles auswählen

MEINE WUNSCHDATEN
$my_task['user'] = 4 , $my_task['task'] = 'Aufgabe 1:Einkaufen'
$my_task['user'] = 0/leer , $my_task['task'] = 'Aufgabe 2:Kochen'
$my_task['user'] = 39 , $my_task['task'] = 'Aufgabe 3:Essen'
$my_task['user'] = 13 , $my_task['task'] = 'Aufgabe 4:Geschirr waschen'
Geht das und wenn JA .. wie :D

Freue mich auf euer Feedback,
Manne.

Re: REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 30.03.2020 07:57
von Dr.Death
Das ist zwar keine direkte Antwort: Aber mir hilft immer: https://regex101.com

Re: REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 30.03.2020 08:05
von Tuxman

Code: Alles auswählen

{(\d+)}(.*?)$
Das erzeugt dir zwei Gruppen, eine mit der Zahl, eine mit dem Rest. ;)

Re: REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 30.03.2020 10:20
von Dr.Death
Cool, sollte funktionieren.

Wenn keine Gruppen gefunden wurden, muß die erste Gruppe "0" sein, und alles andere ist Gruppe zwei, sprich "Aufgabe 2:Kochen"

Re: REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 30.03.2020 10:33
von Tuxman
"Leer" wird von meinem Code nicht abgedeckt. Ich überlasse die Aufgabe, aus "1 oder mehr" "0 oder mehr" zu machen, dem Leser. ;)

Re: REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Verfasst: 02.04.2020 22:48
von gn#36
Für optionale Nummern:

Code: Alles auswählen

/(\{(\d+)\})?(.*?)$/
Deine Match-Ergebnisse stehen in den Gruppen 2 und 3 (öffnende Klammern zählen).

Generierter Beispielcode:

Code: Alles auswählen

$re = '/(\{(\d+)\})?(.*?)$/m';
$str = 'MEINE URSPRUNGSDATEN
{4}Aufgabe 1:Einkaufen
Aufgabe 2:Kochen
{39}Aufgabe 3:Essen
{13}Aufgabe 4:Geschirr waschen';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);