• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Regex gesucht

DD-Stylz

Neues Mitglied
Hallo ich habe einen ganzen Text der dich zeile für Zeile wiederhollt.
Er enthält viele unwichtige Informationen die ich weg haben müsste, und das möglichst schnell, da dachte ich sofort an Regex.
Der Text sieht Zeile für Zeile so aus:

Text: 23min 3sek 23ms (1666.8$)
Text2: 0min 13sek 03ms (1456.3$)

das geht so Zeile für Zeile nur die Zahlenwerte ändern sich, ich möchte da nur den String text behalten, de Rest soll weg.
Kann man das alles in einem Regex packen?

Ich blicke da bei den Regex nicht durch, stosse schon seit nem Jahr immer wieder an die Dinge versuche sie zu begreifen aber das klapt einfach net mit mir und den Regex :D

ich habe mir so einen Regex zusammengebastelt (höchstwahrscheinlich falsch:D)

"^[0-59]min[:space:][0-59]sek[:space:][0-999]ms[:space:]$"

das in den Klammern fehlt noch.

Kann jemand weiterhelfen wie der Regex aussehen müsste?

Kan man überhaupt so viel mit den Regex "auschneiden"

Grüß,
 
Werbung:
Dein Text ist wie folgt aufgebaut:

1 oder 2 Ziffern -> buchstaben ohne Zeilenumbruch -> 1 oder 2 ziffern -> buchstabenohne Zeilenumbruch -> 1 bis 4 ziffern


Also matcht man das ganze wie folgt:
PHP:
"/(\d{1,2}).+(\d{1,2}).+(\d{1,4})/"
(ungetestet)

Ich bin mir nicht ganz sicher, ob die Klammern nicht nur um das \d gehören, so sollte es aber stimmen wenn du die Ziffern dann weiterverwenden willst.
 
Dein Text ist wie folgt aufgebaut:

1 oder 2 Ziffern -> buchstaben ohne Zeilenumbruch -> 1 oder 2 ziffern -> buchstabenohne Zeilenumbruch -> 1 bis 4 ziffern


Also matcht man das ganze wie folgt:
PHP:
"/(\d{1,2}).+(\d{1,2}).+(\d{1,4})/"
(ungetestet)

Ich bin mir nicht ganz sicher, ob die Klammern nicht nur um das \d gehören, so sollte es aber stimmen wenn du die Ziffern dann weiterverwenden willst.

thx, und wie kann ich das noch ausfiltern: (1666.8$)?

wo muss ich noch das wort min /sek /ms ausfiltern?
 
Werbung:
Na ich habe dir doch schon gezeigt wie man den Anfang rausfiltert, jetzt kannst du dir doch wohl denken wie man das Ende macht?


Wenn nicht, dann ist das ein Fall für die Jobbörse. Das Forum dient als Hilfe zur Selbsthilfe, nicht um deine Aufgaben zu lösen.

Quakenet/#php Tutorial - de - Reguläre Ausdrücke
 
Na ich habe dir doch schon gezeigt wie man den Anfang rausfiltert, jetzt kannst du dir doch wohl denken wie man das Ende macht?


Wenn nicht, dann ist das ein Fall für die Jobbörse. Das Forum dient als Hilfe zur Selbsthilfe, nicht um deine Aufgaben zu lösen.

Quakenet/#php Tutorial - de - Reguläre Ausdrücke

Danke für den Link habe es jetzt so gemacht

PHP:
"/(\d{1,4}(min|h|sek|ms)).+/"
Ich verstehe gar nicht, was hier gelöscht werden soll und was nicht. Wenn es nur um den Text vor dem Doppelpunkt geht, würde auch zeilenweises explode reichen, denke ich.


von
Text: 23min 3sek 23ms (1666.8$)
Text2: 0min 13sek 03ms (1456.3$)

sollet nur
Text:
Text2:

übrig bleiben.
 
Zuletzt bearbeitet:
Werbung:
PHP:
echo array_shift(explode(":", "Text: 23min 3sek 23ms (1666.8$)");

geht so net weil der String nicht nur Text: 23min 3sek 23ms (1666.8$) ist sondern

Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)
Text: 23min 3sek 23ms (1666.8$)

müsste da erst nach Zeilenumbrüchen aufteilen, und das hat et immer hingehauen, finde die Lösung die ich momentan habe ideal für meinen Zweck ;)

Danke an euch.
 
Das Problem ist aber, dass RegEx vergleichsweise langsam sind. Einfachere Funktionen wie explode dürften hier besser geeignet sein!


Und das aufteilen nach Zeilen ist auch kein Problem, das funktioniert mit explode("\n", $text);
 
Werbung:
Zurück
Oben