RegEX Problem
mixmastertobsi
- php
Hallo Zusammen,
ich hoffe, mir kann hier jemand bei meinem regular expression Problem helfen.
Ich bekomme von der Bank einen Text-String zurück und muss diesen Parsen, um zu prüfen, ob die Überweisung korrekt übertragen wurde.
Jetzt habe ich gedacht, ich kann ja über preg_match einfach parsen, doch leider gelingt es mir nicht…
Der String sieht wie folgt aus.
In diesem Beispiel war die Übetragung OK
20.11.18 10:26:12 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:26:13 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Unterschrift(en) in Ordnung [24]
Dateiname :
====================================================================
L A S T S C H R I F T E N
Datei-ID : MSG5bf3d3332ebbd4.39934837
Datum/Zeit : 20.11.2018/10:26:11+01:00
--------------------------------------------------------------------
Sammlerreferenz : PAYMENT5bf3d3332ec0b8.04263918
Bank-Code : XXX
Kontonummer : DEXXX
Auftraggeberdaten : XXX
Anzahl der Zahlungssaetze: 1
Summe der Betraege (EUR) : 72,42
Faelligkeitsdatum : 22.11.2018
====================================================================
In diesem Beispiel war die Übetragung fehlerhaft
20.11.18 10:55:19 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:55:19 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Datei ist in ihrem Aufbau fehlerhaft [54]
Ich hatte mal folgendes Problem, um die einzelne Bereiche beim Datum zu trennen, doch leider klappt das auch nicht.
preg_match_all("/[0-9]{2}.[0-9]{2}.[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}^([0-9]{2}.[0-9]{2}.[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2})*/s",$transactions,$match);
Hallo,
warum so kompliziert? Wenn ich das richtig sehe, unterscheiden sich die Antworten doch nur im Ergebnis. Frag doch einfach nach den Ergebniscodes ([1], [24]) ab.
Gruß
Jürgen
preg_match_all("/[0-9]{2}.[0-9]{2}.[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}^([0-9]{2}.[0-9]{2}.[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2})*/s",$transactions,$match);
Auf den ersten Blick:
[0-9]{2}.[0-9]{2}.[0-9]{2}
Matcht zwar auf "20.11.18" aber auch auf "20A11b18".
\
- Was soll das? Das Leerzeichen hat im Gegensatz zum Punkt keine Sonderbedeutung. Metazeichen sind: [](){}|?+-*^$\.
Auch der Stern in der Nähe des Endes wirkt sehr deplaziert. Das Dach-Symbol in der Mitte (^
) sollte wohl ein Pipe (|
) sein und statt dessen ein solches am Anfang stehen.
Mit:
<?php
$txt='20.11.18 10:26:12 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:26:13 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Unterschrift(en) in Ordnung [24]
Dateiname :
====================================================================
L A S T S C H R I F T E N
Datei-ID : MSG5bf3d3332ebbd4.39934837
Datum/Zeit : 20.11.2018/10:26:11+01:00
--------------------------------------------------------------------
Sammlerreferenz : PAYMENT5bf3d3332ec0b8.04263918
Bank-Code : XXX
Kontonummer : DEXXX
Auftraggeberdaten : XXX
Anzahl der Zahlungssaetze: 1
Summe der Betraege (EUR) : 72,42
Faelligkeitsdatum : 22.11.2018
====================================================================';
preg_match_all("/^[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s|[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s/",$txt,$match);
print_r($match);
$txt='20.11.18 10:55:19 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:55:19 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Datei ist in ihrem Aufbau fehlerhaft [54]';
preg_match_all("/^[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s|[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s/",$txt,$match);
print_r($match);
erhalte ich also:
Array
(
[0] => Array
(
[0] => 20.11.18 10:26:12
[1] => 20.11.18 10:26:13
)
)
Array
(
[0] => Array
(
[0] => 20.11.18 10:55:19
[1] => 20.11.18 10:55:19
)
)
Allerdings weiß ich nicht ganz genau, ob das das ist, was Du willst, denn
preg_match_all("/[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s/",$txt,$match);
führt in beiden Fällen zu dem selben Ergebnis.
OK - und wie kann ich jetzt nicht nur das Datum, sondern auch den Rest dieses Eintrags im Array ausgeben lassen?
OK - und wie kann ich jetzt nicht nur das Datum, sondern auch den Rest dieses Eintrags im Array ausgeben lassen?
Erst mal eine Definition oder wenigstens Beispiele dafür liefern, was mit "Rest dieses Eintrags" gemeint ist.
Das jeder EIntrag in einem Array ist und immer nach Datum getrennt wird.
Array
(
[0] => Array
(
[0] => 20.11.18 10:26:12 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
[1] => 20.11.18 10:26:13 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Unterschrift(en) in Ordnung [24]
Dateiname :
====================================================================
L A S T S C H R I F T E N
Datei-ID : MSG5bf3d3332ebbd4.39934837
Datum/Zeit : 20.11.2018/10:26:11+01:00
--------------------------------------------------------------------
Sammlerreferenz : PAYMENT5bf3d3332ec0b8.04263918
Bank-Code : XXX
Kontonummer : DEXXX
Auftraggeberdaten : XXX
Anzahl der Zahlungssaetze: 1
Summe der Betraege (EUR) : 72,42
Faelligkeitsdatum : 22.11.2018
====================================================================
)
)
Hallo mixmastertobsi,
nur um Mistverständnisse auszuschließen: Dieses Array hast du oder möchtest Du dieses Array mittels der Regex erhalten?
Rolf
möchte ich erhalten - ich habe aktuell nur den Textstring von der Bank
Hallo,
ich dachte, du wolltest die Antwort von der Bank dahingehend überprüfen, ob alles OK ist.
Gruß
Jürgen
Hallo mixmastertobsi,
du solltest mehrstufig vorgehen. Zuerst mal zerlegen in die Einträge, dazu kannst Du dieses Pattern nehmen:
/\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d.*?(?=\s*\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d\|$)/s
oder
/\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d.*?(?=\s*\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d\|====|$)/s
Es matcht ein Datum und dann non-greedy alles, bis ein weiteres Datum oder das Dateiende kommt. Die zweite Fassung endet zusätzlich an einer Folge aus Gleichheitszeichen (wenn Du diesen Teil nicht dabei haben willst).
Wichtig ist hier die Option s am Ende, die dafür sorgt dass $ nur das String-Ende, aber keine Zeilenumbrüche darin matcht.
Wenn Du die Meldungen hast, kannst Du Eintrag für Eintrag nach "Ergebnis" oder /Ergebnis\s+:/ suchen und dann auseinandernehmen, was dahinter steht. Das kann man auch wieder per Regex tun, oder von Hand.
Rolf
Das jeder EIntrag in einem Array ist und immer nach Datum getrennt wird.
Ach? So?
<?php
$txt='20.11.18 10:26:12 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:26:13 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Unterschrift(en) in Ordnung [24]
Dateiname :
====================================================================
L A S T S C H R I F T E N
Datei-ID : MSG5bf3d3332ebbd4.39934837
Datum/Zeit : 20.11.2018/10:26:11+01:00
--------------------------------------------------------------------
Sammlerreferenz : PAYMENT5bf3d3332ec0b8.04263918
Bank-Code : XXX
Kontonummer : DEXXX
Auftraggeberdaten : XXX
Anzahl der Zahlungssaetze: 1
Summe der Betraege (EUR) : 72,42
Faelligkeitsdatum : 22.11.2018
====================================================================
20.11.18 10:55:19 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
20.11.18 10:55:19 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Datei ist in ihrem Aufbau fehlerhaft [54]';
$regex = "/[0-9]{2}\.[0-9]{2}\.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\s/";
preg_match_all( $regex , $txt , $delims );
$parts = preg_split( $regex , $txt );
array_shift ( $parts );
for ( $i=0; $i < count( $delims[0] ); $i++ ) {
$parts[$i] = $delims[0][$i] . $parts[$i];
}
print_r( $parts );
Ergebnis:
Array
(
[0] => 20.11.18 10:26:12 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
[1] => 20.11.18 10:26:13 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04E
Teilnehmer : XXX
Ergebnis : Unterschrift(en) in Ordnung [24]
Dateiname :
====================================================================
L A S T S C H R I F T E N
Datei-ID : MSG5bf3d3332ebbd4.39934837
Datum/Zeit : 20.11.2018/10:26:11+01:00
--------------------------------------------------------------------
Sammlerreferenz : PAYMENT5bf3d3332ec0b8.04263918
Bank-Code : XXX
Kontonummer : DEXXX
Auftraggeberdaten : XXX
Anzahl der Zahlungssaetze: 1
Summe der Betraege (EUR) : 72,42
Faelligkeitsdatum : 22.11.2018
====================================================================
[2] => 20.11.18 10:55:19 Datei zur Bank uebertragen
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Uebertragung in Ordnung [01]
Datenuebertragung verschluesselt [04]
Datenuebertragung komprimiert [05]
[3] => 20.11.18 10:55:19 Unterschriftspruefung [21]
Hostname : MULTIVIA
Auftrag : Einreichen von Lastschriften CDD N04F
Teilnehmer : XXX
Ergebnis : Datei ist in ihrem Aufbau fehlerhaft [54]
)
Mir ist aufgefallen, dass vor dem ersten Datum ja $irgendwas stehen kann. Und sei es ein Zeilenumbruch oder eine BOM ...
@mixmastertobsi:
Ist jene die Lösung nach welcher Du suchtest?