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
ich habe mir so einen Regex zusammengebastelt (höchstwahrscheinlich falsch:D)
„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üß,
system
17. April 2010 um 10:12
2
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})/“[/php]
(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})/“/php
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?
system
17. April 2010 um 11:52
4
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
ich möchte da nur den String text behalten
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.
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)).+/“[/PHP]
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.
Frank
18. April 2010 um 12:48
7
[PHP]
echo array_shift(explode(„:“, „Text: 23min 3sek 23ms (1666.8$)“);
[/PHP]
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.
system
18. April 2010 um 18:25
9
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);