Regulärer Ausdruck in MYSQL Wortsuche

Cusco

Erfahrenes Mitglied
Hi,

ich möchte eine Suchroutiene schreiben wo alle Wöter im Text enthalten sein sollen und nur das letzte Ende des Wortes oder das ganzen Wort gewertet wird. z.B. wenn nach 'preis' gesucht wird soll 'Preis' oder 'Goldpreis' oder 'Silberpreis' oder 'Preis'+Sonderzeichen wie : oder / ok sein, aber nicht 'Preisaktion'.

PHP:
if($_SESSION["kntext"]>' ') {
    if($q = explode(" ",$_SESSION["kntext"])) {
       for($t=0;$t<count($q);$t++) {
          $q[$t] = mysql_real_escape_string($q[$t]);
          $GLOBALS["where"] .= " and `news` REGEXP '(".$q[$t].")+[/.|-| |:|,|\[|\n|\r|\)|\(|-|\~|\|]'";
       }
    }
}

Wie erreiche ich durch REGEXP das optimum, ich möchte den Ausdruck so kurz wie möglich halten. Normalerweise braucht nur das Zeichen hinter einem Wort überprüft werden ob es sich nicht um einen Buchstaben oder Zahl handelt. Zeilenende und Zeilenumbrüche müssen auch als Gültig beachtet werden.
 
Zuletzt bearbeitet:
[[:<:]], [[:>:]]

Diese Markierungen bedeuten Wortgrenzen. Sie erkennen den Anfang und das Ende eines Worts. Ein Wort ist eine Folge von Wortzeichen, denen kein weiteres Wortzeichen voransteht oder folgt. Ein Wortzeichen ist ein alphanumerisches Zeichen aus der Klasse alnum oder ein Unterstrich (_).

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0

Ergo:
SQL:
SELECT 'Gesammtpreis' REGEXP '.preis[[:>:]]'
 
Zuletzt bearbeitet von einem Moderator:
Danke Funktioniert Super :) Und Oder - Verknüpfungen scheinen auch keine Problem darzustellen also:

Code:
SELECT 'news' REGEXP '.unze|unzen|oz[[:>:]]'
 
Zurück