Michael: REGEX - Allem außer mit " eingeschlossen, ein * werden

Beitrag lesen

Das lässt sich u.U. ohne reguläre Ausdrücke einfacher lösen.
Dazu brauchtst Du nur den String Zeichen für Zeichen durchgehen.
Triffst Du dabei auf ein Anführungszeichen "merkst" Du Dir ob Du "drinnen" oder "draussen" bist.
Dazu setzt Du eine Variable (flag) wechselweise auf true/false.
Triffst Du hingegen auf ein Leerzeichen entscheidest Du je nach dem flag ob da noch ein Sternchen ergänzt werden soll.
Die einzelnen Zeichen werden zu einem neuen String zusammengesetzt.
So ungefähr jedenfalls.

Hallo lulu!

Vielen Dank für diesen Denkanstoß - das war die Idee, die mir gefehlt hat! Habe es auch "so ungefähr" implementiert, falls es jemanden interessiert:
$q = trim($q);
$q = eregi_replace('[^a-z0-9äöüß +-]"', "", $q);
// Zuviele Leerzeichen rausfiltern
$q = ereg_replace("[[:space:]]{2,}", " ", $q);
// Allen Wörtern außer in "" eingeschlossenen ein * anhängen
$quote=false;
for ($i=0; $i<strlen($q); $i++) {
 // Flag bei Anführungszeichen negieren
 if ($q{$i} == '"') {
  $quote=!$quote;
 // Wenn kein Anführungszeichen offen und dies kein Leerzeichen
 // und (danach der String zu Ende oder ein Leerzeichen folgt)
 } elseif (!$quote && !ereg('[+ -]', $q{$i}) && (!$q{$i+1} || $q{$i+1} == " ")) {
  $q = substr($q, 0, $i+1)."*".substr($q, $i+1, strlen($q)-1);
  // $i ums eins erhöhen, da ja ein Zeichen hinzugefügt wurde
  $i++;
 }
}

Grüße
Michael