2Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
215
215
EMPFEHLEN
-
Hi,
ich weiß nicht, ob es daran liegt, das heute Freitag ist, oder ob ich mich gerade nur dumm anstelle, aber ich brauche etwas Hilfe und hoffe auf euer Wissen.
Folgendes Problem:
Ich brauche 2 Werte aus einer Zeile einer Log-Datei.
Szenario:
Code :1 2 3 4 5 6 7 8
0000-00-00 00:00:00 [TYPE1] Test Test Test Test Value1 Test Test 0000-00-00 00:00:00 [TYPE1] Test Test Test Test Test Test Test 0000-00-00 00:00:00 [TYPE2] Test Test Value2 Test Test Test Test 0000-00-00 00:00:00 [TYPE3] Test Test Test Value3 Test Test Test 0000-00-00 00:00:00 [TYPE1] Test Test Test Test Test Test Test 0000-00-00 00:00:00 [TYPE1] Value2 Test Test Test Test Test Test 0000-00-00 00:00:00 [TYPE2] Test Test Test Test Test Test Test 0000-00-00 00:00:00 [TYPE1] Test Value1 Test Test Test Test Test
Ich benötige davon den TYPE und das Value.
Bisher habe ich das ganze mit 2 Regulären Ausdrücken gemacht, aber da die Log-Datei nun langsam etwas größer wird wollte ich die Laufzeit des PHP-Scriptes verringern indem ich die Anzahl der Regulären Ausdrücke halbiere.
Folgenden Ansatz hatte ich:
Code :1
\[(TYPE1|TYPE2|TYPE3)\] .*?(Value1|Value2|Value3)
Ja, TYPE und Value haben wenige feste Werte, daher mit einer einfachen Oder-Abfrage lösbar.
Der angegebene RegEx funktioniert soweit auch, dass er mir die Zeilen ausgibt, wo beide Werte vorhanden sind. Leider benötige ich aber alle Zeilen, auch die, wo der Value nicht enthalten ist, also war mein guter Glaube einfach ein ? ans Ende zu setzen um somit aufzuzeigen, das der Value nicht vorhanden sein muß. Allerdings findet er dann überhaupt keinen Value mehr.
Bin für jeden Tip dankbar, da ich nun schon alles möglich ausprobiert hab und vielleicht den Wald vor lauter Bäumen nicht mehr sehe.
Tschüü... MrCPU
-
20.01.12 16:39 #2
- Registriert seit
- Jun 2007
- Ort
- Passau (Niederbayern)
- Beiträge
- 1.394
Hi und herzlich Willkommen

Laut diesem RegEx Tester funktioniert dein Ausdruck wie ne Eins. Eventuell stimmt bei dir das Escaping für PHP nicht?
Poste mal bitte die entsprechenden PHP-Zeilen.
Gruß,
BKÜber eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
Hi BK,
da muß ich dich leider enttäuschen.
Hab gerade mal schnell ein Testscript geschrieben, da ich bisher nur mit "The Regex Coach" (TRC) die Vorbereitungen getroffen habe und war nun doch etwas verunsichert, ob nach der mehrjährigen Nutzung des Tools vielleicht doch mal eine andere Auflösung des RegEx zwischen PHP und TRC vorliegt.
Hier mal das Testscript:
Ohne das ? am Ende kommt:PHP-Code:<?php
$logData[0] = '0000-00-00 00:00:00 [TYPE1] Test Test Test Test Value1 Test Test';
$logData[1] = '0000-00-00 00:00:00 [TYPE1] Test Test Test Test Test Test Test';
$logData[2] = '0000-00-00 00:00:00 [TYPE2] Test Test Value2 Test Test Test Test';
$logData[3] = '0000-00-00 00:00:00 [TYPE3] Test Test Test Value3 Test Test Test';
$logData[4] = '0000-00-00 00:00:00 [TYPE1] Test Test Test Test Test Test Test';
$logData[5] = '0000-00-00 00:00:00 [TYPE1] Value2 Test Test Test Test Test Test';
$logData[6] = '0000-00-00 00:00:00 [TYPE2] Test Test Test Test Test Test Test';
$logData[7] = '0000-00-00 00:00:00 [TYPE1] Test Value1 Test Test Test Test Test';
$regEx = '/\[(TYPE1|TYPE2|TYPE3)\] .*?(Value1|Value2|Value3)/';
foreach ($logData as $logLine) {
if (preg_match($regEx, $logLine, $lineData)) {
unset($lineData[0]);
var_dump($lineData);
echo '<br />';
}
}
?>
und mit dem ? am Ende:PHP-Code:array(2) { [1]=> string(5) "TYPE1" [2]=> string(6) "Value1" }
array(2) { [1]=> string(5) "TYPE2" [2]=> string(6) "Value2" }
array(2) { [1]=> string(5) "TYPE3" [2]=> string(6) "Value3" }
array(2) { [1]=> string(5) "TYPE1" [2]=> string(6) "Value2" }
array(2) { [1]=> string(5) "TYPE1" [2]=> string(6) "Value1" }
Leider sind beide Ergebnisse nicht die gewünschten.PHP-Code:array(1) { [1]=> string(5) "TYPE1" }
array(1) { [1]=> string(5) "TYPE1" }
array(1) { [1]=> string(5) "TYPE2" }
array(1) { [1]=> string(5) "TYPE3" }
array(1) { [1]=> string(5) "TYPE1" }
array(2) { [1]=> string(5) "TYPE1" [2]=> string(6) "Value2" }
array(1) { [1]=> string(5) "TYPE2" }
array(1) { [1]=> string(5) "TYPE1" }
Tschüü... MrCPUGeändert von MrCPU (20.01.12 um 17:04 Uhr)
-
20.01.12 17:56 #4
- Registriert seit
- Jun 2007
- Ort
- Passau (Niederbayern)
- Beiträge
- 1.394
Hi,
oh, hab überlesen, dass du auch die Zeilen ohne Value brauchst...
Hier, der sollte jetzt gehen:
Code :1
(\[[^\]]+\]) (.+(Value1|Value2|Value3).+|.+)
Das Ergebnis sieht dann so aus:
[1]: Der TypPHP-Code:array(2) {
[1]=> string "TYPE1"
[2]=> string "Test Test Test Test Test Test Test"
[3]=> string "Value1"
}
[2]: Die komplette Nachricht
[3]: Der Value oder NULL, falls nicht gesetzt.
Gruß,
BKÜber eine gute Bewertung freut sich jeder ;)
Bitte erledigte Threads als "Erledigt" markieren.
"Though a program be but three lines long, someday it will have to be maintained.''
-- Geoffrey James, "The Tao of Programming"
-
Hi BK,
super, Danke für die Hilfe.
Funktioniert ohne Probleme mit ein paar kleinen Anpassungen.
Schönes Wochenende noch.
Tschüü... MrCPU
Ähnliche Themen
-
Hilfe bei Regulärem Ausdruck 2.
Von exiter28 im Forum .NET CaféAntworten: 3Letzter Beitrag: 06.05.11, 12:55 -
Hilfe bei Regulärem Ausdruck
Von exiter28 im Forum .NET Windows FormsAntworten: 1Letzter Beitrag: 05.05.11, 13:16 -
Hilfe zu regulärem Ausdruck
Von d_b im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 09.05.09, 10:34 -
Hilfe bei regulärem Ausdruck
Von Commanderalpha im Forum PHPAntworten: 5Letzter Beitrag: 04.09.07, 12:42 -
Hilfe bei Regulärem Ausdruck
Von schoko im Forum PHPAntworten: 2Letzter Beitrag: 02.08.06, 14:50





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren