Huhu Michael
Habe es auch "so ungefähr" implementiert, falls es jemanden interessiert:
Ja mich :-)
$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++;
}
}
Fein. Interessant wie unterschiedlich man so eine Aufgabe lösen kann. Hier mal meine Variante, ist quasi das gleiche aber doch ein bischen anders.
Falls es jemanden interessiert:
<?php
$s = '"ich will" nach "etwas suchen" was ich verloren habe';
// überzähligen whitespace reduzieren
$s = trim($s);
$s = preg_replace('#\s+#', ' ', $s);
// am Ende ein Leerzeichen ergänzen, ...
// ... damit der letzte Begriff auch ein Sternchen bekommt
$s .= ' ';
$l = strlen($s);
$in_quotes = false;
$tmp = '';
for ($i = 0; $i<$l; $i++){
$char2use = $s[$i];
if ($char2use == '"'){
$in_quotes = !$in_quotes;
}
if ($char2use == ' ' && !$in_quotes && $lastchar !='"'){
$char2add = '* ';
}else{
$char2add = $char2use;
}
$tmp .= $char2add;
$lastchar = $char2use;
}
echo $tmp;
?>
Viele Grüße
lulu
bythewaythewebsuxgoofflineandenjoytheday