REGEXP - Wörter in einem Text finden

derlippe

Grünschnabel
Hallo!
Ich möchte gern mittels REGEXP den Text in einer mysql-Tabelle nach mehreren Worten durchsuchen ... z.B. wort1, wort2, wort3. Sind alle diese Worte vorhanden, so soll die Zeile ausgegeben werden.

also: SELECT * FROM `tabelle` WHERE `infotext` REGEXP ...

Hab schon einige Varianten versucht, komme jedoch einfach nicht weiter ...
mit ... REGEXP '(wort1|wort2|wort3)';
... liefert mir die Abfrage auch Zeilen einer Tabelle, welche nur ein Wort enthalten!

mit ... REGEXP 'wort1(.*)wort2(.*)wort3';
... erhalte ich nur Zeilen, in der die Wörter in dieser Reihenfolge zu finden sind

mit ... REGEXP '(wort1(.*)wort2|wort2(.*)wort1)';
... wird zwar die Reihenfolge berücksichtigt und die Zeile auch nur ausgegeben, wenn alle Wörter vorhanden sind, die abfrage wird aber bei mehr als 3-4 Wörter schon nicht mehr überschaubar es müssten ja alle Möglichkeiten der Reihenfolge eingegeben werden!

gib es nicht eine einfachere Lösung?

Hinweis: die oben angegebenen REGEXP-Ausdrücke sind um einiges verkürzt! Vor und nach diesem Problem kommen eigentlich noch andere Bedingungen! mir geht es aber hauptsächlich um diese Sache.

Vielen Dank schonmal!
tschau derlippe
 
.. mit dem "+" Operator muss eine Suchkette mindestens einmal vorkommen .. Vielleicht solltest du dir den nochmal anschauen ..

Gruß Stefan
 
Also wenn ich den "+" Operator verwende, dann funktioniert das trotzdem nicht.
In Verbindung mit dem '|' (ODER) erhalte ich trotzdem Zeilen, die auch nur ein Wort enthalten!
Man müsste da das ODER 'einfach' durch UND ersetzen können, sodass die Reihenfolge der Worte nicht berücksichtigt wird. Nur gibt es sowas überhaupt?
 
Zuletzt bearbeitet:
Nimm mehrere RLIKE, getrennt durch AND(oder auch LIKE).

Wenn die Reihenfolge egal sein soll, wirst du an dem AND nicht vorbeikommen.
 
@teppi
Verwende ich den '+'-Operator bei '(.*)((WORT1)+|(WORT2)+)(.*)', dann liefert mir
die Abfrage das gleiche Ergebnis wie ohne '+', weil ja die ODER-Bedingung schon
bei einer 'wahren Seite' erfüllt ist! Oder meintest du das anders?

Ist schon richtig, dass die einzelnen Komponenten mit UND verknüpft sind.
z.B. bei '(.*)(WORT1)(WORT2)(.*)' erhalte ich auch nur zeilen,
in denen erst WORT1 UND dann WORT2 vorhanden ist!
Ich meinte das mit dem UND aber so, dass WORT1 UND WORT2 vorhanden sein sollen,
egal in welcher Reihenfolge. Also auch 'WORT2 ... WORT1' gefunden wird und das evtl. bei mehreren Worten.

@Sven
Nu hat's bei mir klick gemacht!
Ich hatte mich zu sehr auf den Ausdruck innerhalb des REGEXP '' konzentriert.
LIKE hilft mir nicht ganz so sehr, weil ich vor und nach meinen Ausdrücken noch andere Bedingungen habe. Aber die Idee mehrere REGEXP mit AND zu verknüpfen ist gut!
Habs folgendermaßen gelöst:

SELECT * FROM mytable WHERE text REGEXP '(...)wort1(...)' AND text REGEXP '(...)wort2(...)' usw.

Dann wird der Ausdruck auch bei mehreren Worten nicht ganz so komplex!
Habt vielen Dank!

derlippe
 

Neue Beiträge

Zurück