# Schnell gefragt: RegExp mehrere Wörter finden



## EaStErDoM (20. Dezember 2006)

Wie kann ich in einem Text mit Regular Expressions mehrere Wörter finden, die  darin enthalten sein *müssen*, aber auch durcheinander sein können. Ich kenn nur das ODER also (entweder|das|wort|oder|das) wie mach ich ein UND ?


----------



## Gumbo (20. Dezember 2006)

Das ist mit regulären Ausdrücken alleine nicht machbar.


----------



## EaStErDoM (20. Dezember 2006)

Das erklärt einiges.


----------



## Hirnhamster (20. Dezember 2006)

gib mal ein Beispiel, was du mit dem Regex erreichen willst


----------



## EaStErDoM (20. Dezember 2006)

Naja Wennich einen Text habe wie:



> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur tincidunt euismod leo. Nunc augue purus, luctus at, convallis quis, consectetuer a, purus. Aliquam vestibulum convallis dolor. Praesent non quam. Aenean a nulla. Nullam pulvinar tortor id nibh. Nulla a ante non metus ullamcorper vulputate. Morbi iaculis justo at purus. In fringilla bibendum lorem. Integer tincidunt diam nec dolor. Cras adipiscing. Ut adipiscing condimentum dui. Nulla odio. Sed risus dolor, sagittis sed, auctor quis, vehicula ac, nisl. Vestibulum at turpis eu nisl iaculis feugiat.



Und ich suche nach „fringilla vestibulum euismod“, soll er mir den zitierten Text als Treffer rausgeben, weil alle drei Worte drin vorkommen.


----------



## CIX88 (21. Dezember 2006)

Da fallen mir spontan auch nur Umwege mit stristr() oder strpos() ein.


----------



## Gumbo (21. Dezember 2006)

Wie bereits gesagt, ist das allein mit regulären Ausdrücken nicht möglich. Du müsstest jedes Wort einzeln suchen und die Gesamtheit der Treffer beurteilen, etwa:
	
	
	



```
strpos($string, 'fingilla') !== false && strpos($string, 'vestibulum') !== false && strpos($string, 'euismod') !== false
```
Falls die Daten in einer Datenbank stehen, könnte dir auch eine Volltextsuche weiterhelfen.


----------



## EaStErDoM (21. Dezember 2006)

Ich habe eben versucht die Volltextsuche zu umgehen, weil ich da die Tabelle umbauen muss und darauf hab ich keinen Zugriff. Da müssen ja die Spalten, die durchsuchbar sein sollen mit FULLTEXT() versehen werden.

Ich probier mal ob ich das doch irgendwie hinkrieg, dass ich das nachträglich machen kann.

EDIT:
Jetzt ist der Index dreimal so groß wie die Daten, liegt das nur daran, dass noch wenige Datensätze in der Tabelle sind oder bleibt das jetzt generell so?


----------



## EaStErDoM (21. Dezember 2006)

Jetzt hab ich ein echt merkwürdiges Problem:

Wenn ich Abfrage:

```
SELECT * FROM agora WHERE typ=1 AND MATCH(text,bezeichner) AGAINST('funktioniert,suche')
```

sagt er:


> Can't find FULLTEXT index matching the column list



wenn ich aber mach

```
SELECT * FROM agora WHERE typ=1 AND MATCH(bezeichner) AGAINST('funktioniert,suche')
```
oder

```
SELECT * FROM agora WHERE typ=1 AND MATCH(text) AGAINST('funktioniert,suche')
```

dann funktioniert es.

Also beide Spalten gehn nicht, einzeln aber schon. Habs jetzt schon mit allen Anführungszeichen versucht, zeigt auch keine Wirkung. Wasn da los?


----------

