ursus contionabundo: RegEX Problem

Beitrag lesen

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.