PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ereg oder eregi


bweichel
03.07.2003, 16:05:40
Hallo,

ich habe eine Zeichenkette und möchte alle in " (Anführungszeichen) gesetzte Strings herausfiltern und einzeln bearbeiten. Wir kann ich das mit ereg lösen?

Wenn ich nach ereg(""(.*)"",$str,$regs); suche bekomme ich den Zeichensatz vom ersten bis zum letzen " angezeigt. Ich will aber jeden String der in " einzeln haben.

Vielen Dank!

Progman
03.07.2003, 19:39:41
benutzt kein ereg, benutzt pcre

http://www.php.net/pcre
http://tut.php-q.net/regex.html

Der PCRE Regex sieht so aus


="([^"]+)"=


Was willst du damit machen? Muss dann ggf mit preg_replace arbeiten

bweichel
03.07.2003, 21:20:56
Hallo!

Danke erst mal für die schnelle Antwort.

Also ich möchte damit die Logfiles des Server auslesen.

Ich wollte ursprünglich nach jedem Leerzeichen in den Logs ein ; setzen, damit ich sie nachher problemlos als .csv abspeichern kann und sich das ganze in Excel öffnen läßt.

Dann habe ich aber bemerkt das die Strings in " stehen und sich innerhalt der Anführungszeichen auch Leerzeichen befinden. Und dann wollte ich halt diese Strings mit ereg herausfiltern. Ich wußte aber nicht wie ich das erste und das nächste " nehmen kann. Ich hab immer nur das erste und das letzte " bekommen.

Was macht preg_replace? Ist das zu vergleichen mit ereg_replace?

Wie würdest du das Problem lösen? Ohne Software für Log Analyse... ich will es ja selbst schreiben können.

Gruß Björn

c4
04.07.2003, 06:36:24
Reicht es nicht schon, jedes " " mit ", " zu ersetzen? Weiß ja nicht, wie das mit der Anzahl Leerzeichen und so aussieht.

bweichel
04.07.2003, 10:40:57
Ja, das hab ich mir auch schon gedacht. Aber die Anführungszeichen stehen nicht immer hintereinander.

Hier ein Beispiel:
66.150.40.66 - - [03/Jul/2003:00:41:59 +0200] "HEAD / HTTP/1.1" 200 0 www.media2be.de "-" "sitecheck.internetseer.com (For more info see: http://sitecheck.internetseer.com)" "-"

Hast du ne Idee?

Danke für die Hilfe!

c4
04.07.2003, 10:43:29
Naja, so ungefähr sieht mein Log auch aus.

- ich hab zu erst die IP geholt: substr() bis ' - - '
- den Teil entfernt: substr() von ' - - ' bis Ende

- dann die Zeit mit substr() von [ +1 bis ] -1
- den Teil entfernt: substr() von ] bis Ende

- dann Datei und Protokoll und so mit substr() von " +1 bis " -1
- den Teil entfernt: substr() von " bis Ende

- usw.

F I
04.07.2003, 17:17:25
Was macht preg_replace? Ist das zu vergleichen mit ereg_replace?

preg_replace macht so ungefähr das selbe wie ereg_replace, ist nur um einiges schneller. Ob der Aufbau gleich ist, kann man im Manual nachlesen oder auch hier irgendwo. Ich glaube schon, benutzte ereg_replace bisher nur nie...

Die regulären Ausdrücke sind jedenfalls bei PCRE in der Perl-Syntax, bei ereg irgendwie anders.