[preg_match] leeres $matches-Array bei Übergabe von $subject als Variable in Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [preg_match] leeres $matches-Array bei Übergabe von $subject als Variable in Schleife

    Hallo,

    ich schreibe gerade an einem kleinen Programm, das eine CSV-Datei mit fgetcsv einließt und den Inhalt anschließend in eine DB schreiben soll.

    An einer Stelle möchte ich einen String mittels preg_match in seine Einzelteile zerlegen. Und das ist der Haken. Wenn ich den zweiten Parameter von preg_match per Variable übergebe, bekomme ich ein leeres $matches-Array zurück. Wenn ich den $subject-Parameter allerdings hartcodiert übergebe, funktioniert es (das ist allerdings bei einer Schleife weniger sinnvoll).

    Hier mein Code:
    PHP-Code:
    <?php
        header
    ("Content-Type: text/html; charset=utf-8");
        
    setlocale(LC_ALL'de_DE');

        
    define("Wertstellung"1);
        
    define("Buchungstext"3);
        
    define("Umsatz"4);

        
    $datei "umsaetze.csv";
        
    $row 1;
        
    $i=0;
        
    $__postings = array();
        
    $pattern "Auftraggeber(.*)Buchungstext(.*)End-to-End-Ref(.*)Mandatsref(.*)Gläubiger-ID(.*)Ref(.*)";

        if ((
    $handle fopen($datei"r")) !== FALSE) {
            while ((
    $data fgetcsv($handle1000";")) !== FALSE) {
                if (
    $row <= 11) { $row++; continue; }
                
    $num count($data);
                if (
    $num == 6) {
                    
    $__postings[$i]["Datum"] = date("d.m.Y"strtotime($data[Wertstellung]);

                    
    $matches null;
                    
    $subject $data[Buchungstext];
                    
    preg_match("/$pattern/"$subject$matches);
                    
    echo 
    "<pre>";
    var_dump($data[Buchungstext]); /* string(239) "Auftraggeber: AMAZON EU S.A.R.L. Buchungstext: 999-99999999-9999999 Amazon.de 00000 00000000000 End-to-End-Ref.: 9999999999999999 COR1 / Mandatsref.: xxxX99XX.XXX:xxx:xxXx+99X99xx9 Gläubiger-ID: DE99ZZZ00000000000 Ref. XX999999X9999999/99999" */
    var_dump($matches); /* array(0) {} */
    echo "</pre>";
                    
                    
    $__postings[$i]["Auftraggeber"] = $matches[1]; /* Notice: Undefined offset: 1 in [...] on line 33 */
                    
    $__postings[$i]["Buchungstext"] = $matches[2]; /* Notice: Undefined offset: 2 in [...] on line 34 */
                    
    $__postings[$i]["End-to-End-Ref"] = $matches[3]; /* Notice: Undefined offset: 3 in [...] on line 35 */
                    
    $__postings[$i]["Mandatsref"] = $matches[4]; /* Notice: Undefined offset: 4 in [...] on line 36 */
                    
    $__postings[$j]["Gläubiger-ID"] = $matches[5]; /* Notice: Undefined offset: 5 in [...] on line 37 */
                    
    $__postings[$i]["Ref"] = $matches[6]; /* Notice: Undefined offset: 6 in [...] on line 38 */

                    
    $__postings[$i]["Umsatz"] = str_replace(array('.'','), array('''.'), $data[Umsatz]);
                    
    $i++;
                }
                
    $row++;
            }
            
    fclose($handle);
        }
    ?>
    In der Variablen $data[Buchungstext] ist der richtige String enthalten. Kann ich auch Problemlos ausgeben. Mein regulärer Ausdruck tut das was er soll, allerdings nur nicht meiner Schleife.

    Woran könnte das liegen?

    Vielen Dank und Grüße

  • #2
    Zitat von andyB Beitrag anzeigen
    Woran könnte das liegen?
    An der Zeichenkodierung.

    Lass dir mal beide String mittels urlencode() behandelt ausgeben, und vergleiche die %-kodierten Bytewerte.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo wahsaga,

      danke für den Tipp.

      Habe es jetzt mit
      PHP-Code:
      $subject iconv("Windows-1252""UTF-8"$data[Buchungstext]); 
      hinbekommen!

      Kommentar

      Lädt...
      X