Ik heb bijvoorbeeld een volgende zoekopdracht voor mijn te schrijven eenvoudige zoekmachine op mijn eigen website:
woord "dit is een test" en "dit is er nog zo eentje"
Nu wil ik graag dat groepen die met een quote worden begonnen en geëindigd er apart uit worden gehaald en ook als groep in de database opgezocht worden.
Ik had geen idee hoe ik dat moest doen, maar dacht er aan om eerst de groepen er uit te filteren, die in ene array opslaan, telkens de string korter maken door een str_replace uit te voeren op de string met een groep en dan de losse woorden aan de array waar de groepen al in zitten toevoegen.
Dus:
eerst worden de groepen dit is een test en dit is er nog zo eentje er uit gevist in een array $zoeken gezet
Vervolgens wordt de groep uit de originele zoekstring gehaadl waardoor de zoekstring nu woord en is.
Daarna wordt deze overgebleven zoekstring geëxplode op de spatie en toegevoegd aan de array $zoeken.
Ten slotte wordt voor elke value in de array $zoeken een LIKE in de zoekquery toegevoegd en de totale zoekquery uitgevoerd.
Ik zit echter met het probleem hoe ik dit exact voor elkaar krijg en blijf vooral hangen op het filteren van de groepen uit een zoekstring.
Met mijn huidige code pakt PHP namelijk alles tussen de allereerste quote en de allerlaatste quote en vind ie dus maar 1 groep (met in het midden 2 quotes) terwijl er eigenlijk 2 groepen zijn. Ik heb al even wat documentatie over regulaiere expressies gelezen, maar kom er niet uit.
De documentatie zegt ^het begin van regel is en $ het einde, maar dit is in dit geval niet echt van toepassing.
Ook wordt er in gezegd dat \A de start van ene tekst aan geeft en \Z het einde van een tekst, maar ook dit haalt niets uit.
Weet iemand voor mij de juiste methode?
Dit is mijn script nu:
woord "dit is een test" en "dit is er nog zo eentje"
Nu wil ik graag dat groepen die met een quote worden begonnen en geëindigd er apart uit worden gehaald en ook als groep in de database opgezocht worden.
Ik had geen idee hoe ik dat moest doen, maar dacht er aan om eerst de groepen er uit te filteren, die in ene array opslaan, telkens de string korter maken door een str_replace uit te voeren op de string met een groep en dan de losse woorden aan de array waar de groepen al in zitten toevoegen.
Dus:
eerst worden de groepen dit is een test en dit is er nog zo eentje er uit gevist in een array $zoeken gezet
Vervolgens wordt de groep uit de originele zoekstring gehaadl waardoor de zoekstring nu woord en is.
Daarna wordt deze overgebleven zoekstring geëxplode op de spatie en toegevoegd aan de array $zoeken.
Ten slotte wordt voor elke value in de array $zoeken een LIKE in de zoekquery toegevoegd en de totale zoekquery uitgevoerd.
Ik zit echter met het probleem hoe ik dit exact voor elkaar krijg en blijf vooral hangen op het filteren van de groepen uit een zoekstring.
Met mijn huidige code pakt PHP namelijk alles tussen de allereerste quote en de allerlaatste quote en vind ie dus maar 1 groep (met in het midden 2 quotes) terwijl er eigenlijk 2 groepen zijn. Ik heb al even wat documentatie over regulaiere expressies gelezen, maar kom er niet uit.
De documentatie zegt ^het begin van regel is en $ het einde, maar dit is in dit geval niet echt van toepassing.
Ook wordt er in gezegd dat \A de start van ene tekst aan geeft en \Z het einde van een tekst, maar ook dit haalt niets uit.
Weet iemand voor mij de juiste methode?
Dit is mijn script nu:
PHP:
1
2
3
4
5
6
7
8
9
| <?php $patern = "/(\"(.*)\")*?/"; $tekst = "woord \"dit is een test\" en \"dit is er nog zo eentje\""; preg_match($patern,$tekst,$matches); echo "<pre>"; echo "<b>Input:</b>\n".$tekst."\n\n<b>Matches-array:</b>\n"; print_r($matches); echo "</pre>"; ?> |