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

Beitrag lesen

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