REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

REGEX um ganze Zahlen zwischen {} vom Rest zu trennen

Beitrag 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.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

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

Beitrag von Dr.Death »

Das ist zwar keine direkte Antwort: Aber mir hilft immer: https://regex101.com
Tuxman
Mitglied
Beiträge: 2284
Registriert: 24.05.2003 13:32
Kontaktdaten:

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

Beitrag von Tuxman »

Code: Alles auswählen

{(\d+)}(.*?)$
Das erzeugt dir zwei Gruppen, eine mit der Zahl, eine mit dem Rest. ;)
tux. Ehemaliger Moderator ohne Sondertitel.
tuxproject.de
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

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

Beitrag 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"
Tuxman
Mitglied
Beiträge: 2284
Registriert: 24.05.2003 13:32
Kontaktdaten:

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

Beitrag von Tuxman »

"Leer" wird von meinem Code nicht abgedeckt. Ich überlasse die Aufgabe, aus "1 oder mehr" "0 oder mehr" zu machen, dem Leser. ;)
tux. Ehemaliger Moderator ohne Sondertitel.
tuxproject.de
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

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

Beitrag 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);
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“