Christian Michel: PREG_SPLIT

Ich habe da noch ein Problem, mit dem PREG_SPLIT.

Folgendes Szenario:

In ein Suchfeld einer Suchmaschine wird folgendes eingegeben:

suchwort1 suchwort2 "wort1 wort2 wort3" suchwort3

Nun soll der übergebene Text gesplittet werden unter folgenden Voraussetzungen:

  • es soll bei Leerzeichen getrennt werden
  • es darf nicht innerhalb der " " getrennt werden.

preg_split(/\s/ ....... würde alle whitespaces als Trenner sehen, auch die innerhalb der ""
preg_split(/\s|"([^"]+)"/ .... lässt zwar die Whitespaces innerhalb der " " in Ruhe, verschluckt aber auch die " "
preg_split(/(?!="\w*\s\w*")\s/ ..... trennt wieder bei allen Whitespaces.

Leider bin ich mit meinem RegularExpression-Wissen nun am Ende.

Hat hier jemand eine praktikable Idee?

MfG

CM

  1. Hallo Christian,

    preg_split(/\s|"([^"]+)"/ .... lässt zwar die Whitespaces innerhalb der " " in Ruhe, verschluckt aber auch die " "

    kann ich nicht ganz nachvollziehen. Müßte nicht der ganze Ausdruck in "" verschluckt werden? Und wenn ja, kannst Du ihn doch mit dem flag "PREG_SPLIT_DELIM_CAPTURE" auch zurückgeben. Ansonsten würde ich es halt in zwei Schritten machen: erst nach "wort1 wort2 wort3" suchen und dann die restlichen Teile am " " aufteilen.

    Gruß, Andreas

    --
    <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
    http://was-ist-das.andreas-lindig.de
    1. preg_split(/\s|"([^"]+)"/ .... lässt zwar die Whitespaces innerhalb der " " in Ruhe, verschluckt aber auch die " "

      kann ich nicht ganz nachvollziehen. Müßte nicht der ganze Ausdruck in "" verschluckt werden? Und wenn ja, kannst Du ihn doch mit dem flag "PREG_SPLIT_DELIM_CAPTURE" auch zurückgeben. Ansonsten würde ich es halt in zwei Schritten machen: erst nach "wort1 wort2 wort3" suchen und dann die restlichen Teile am " " aufteilen.

      ohne PREG_SPLIT_DELIM_CAPTURE würde er von vornherein schon die " " verschlucken, das stimmt.
      Das PREG_SPLIT_DELIM_CAPTURE steht so auch mit in der Anweisung mit drin, ich wollte nur nicht die ganze Zeile schreiben, da ja nur die geschriebenen Teile relevant sind.
      Allerdings ist eben das Problem, dass wenn er es am " " trennt, diese eben verschwinden.
      Deshalb dachte ich, es muss doch eine Regular Expression geben, die mir die Möglichkeit gibt, alles in einer Zeile zu trennen, da ja die Wörter innerhalb der " " in einem Stück erhalten bleiben müssen und nur außerhalb der Doublequotes alles am Whitespace getrennt werden soll.
      Und die Doublequotes müssen unbedingt dem String zugehörig bleiben, da sie wichtig sind für die Übergabe an die Suchmaschine, damit auch diese weiß, dass dort eine Phrase gesucht wird.

      Gruß

      CM