FICHTL: / (REGEX) preg_split nach Leerzeichen aber nicht " "

Hallo,

ich bräuchte Hilfe bei einem REGEX, und zwar möchte ich eine Zeile mittels preg_split trennen. Getrennt werden soll nach \s+ also Leerzeichen oder Tabstops. Da es aber in den einzelnen Feldern auch Leerzeichen geben kann sollte man diese Felder in "" fassen können. Strings mit Leerzeichen in Anführungszeichen werden nicht getrennt.

Beispiel:

Feld1 Feld2 "Feld 3"

sollte nur drei Felder zurückliefern.

Leider hab ich keine Ahnung wie ich da anfangen bzw. nach was ich suchen sollte. Bisher bin ich nicht weiter gekommen als bis zu.

preg_split("/\s+/", $line);

Wie mach ich da jetzt weiter?

"/[^"].\s+[^"]/" funktioniert nicht und alles andere was ich probiert habe auch nicht.

Wer hat Lust mir das zu erklären.

Danke im Voraus
FICHTL

  1. Hi,

    ich bräuchte Hilfe bei einem REGEX, und zwar möchte ich eine Zeile mittels preg_split trennen. Getrennt werden soll nach \s+ also Leerzeichen oder Tabstops. Da es aber in den einzelnen Feldern auch Leerzeichen geben kann sollte man diese Felder in "" fassen können. Strings mit Leerzeichen in Anführungszeichen werden nicht getrennt.

    wie Du dem Archiv entnehmen kannst, reicht hierzu eine einfache RegExp nicht aus. An entsprechender Stelle findest Du auch Algorithmen und Beispielcodes, die das Problem lösen.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo, danke für die Antwort!

      Ich hab leider nur die Perl-Lösung gefunden gibts da auch was für PHP? Die PHP-REGEX scheinen doch etwas anders zu funktionieren.

      $text = ""Cimetrix, Inc"";

      zB.:

      $text =~ m{"([^"\]*(?:\.[^"\]*)*)",? | ([^,]+),? | ,}x;
      diese perl zeile ergibt das richtige: Cimetrix, Inc

      in php dürfte das dann so aussehen:
      preg_match(""([^"\]*(?:\.[^"\]*)*)",? | ([^,]+),? | ,", $text, $matches);
      ergibt allerdings nur array(2) { [0]=> string(10) ""Cimetrix," [1]=> string(8) "Cimetrix" }

      vielleicht habe ich ja beim regex was falsch denn das m{} geht nicht in php und ich weiß auch nicht wie ich das sonst nachbilden kann...

      schöne Grüße
      FICHTL

      1. Hi,

        Ich hab leider nur die Perl-Lösung gefunden gibts da auch was für PHP?

        frag diejenigen PHP-Entwickler, denen ich den Beispielcode aus der Perl-FAQ genannt habe; die haben ihn nämlich ebenfalls umsetzen müssen. Der Algorithmus ist unter PHP völlig identisch, nur die Sprache ist eine andere.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes