Ik ben een zoekmachine aan het schrijven voor een website. De zoekmachine accepteert losse woorden en zinsdelen die gegroepeerd zijn d.m.v. " tekens. Net als Google dus. Nou converteert mijn script de query naar een array met die woorden en/of zindelen.
Vervolgens wordt er een vergelijking gedaan in de database en wil ik de eerste zin waarin het woord voorkomt extraheren en tonen in de zoekresultaten. Ik had de volgende reguliere expressie (en veel varianten) geschreven maar dat leek geen succes:
Zoals je aan de $this-notatie kunt zien is de functie deel van een class. Verder ziet de regexp er zo freaky uit dat ik niet verwachtte dat-ie zou werken, maar anders wist ik het niet. Punt is dat de body kan variëren van:
"QueryPart"
tot:
"In deze zin staat de querypart die we zoeken."
Het volgende probleem is de plaatselijke case-insensitivity, want een zin herken je doorgaans aan de eerste hoofdletter. Een voorafgaande punt is er niet altijd
Vervolgens wordt er een vergelijking gedaan in de database en wil ik de eerste zin waarin het woord voorkomt extraheren en tonen in de zoekresultaten. Ik had de volgende reguliere expressie (en veel varianten) geschreven maar dat leek geen succes:
PHP:
1
2
3
4
5
6
7
| function getChunks($body) { $chunks = ""; foreach($this->aQuery as $queryPart) { preg_match_all("/[A-Z]*.*\b$queryPart\b.*[\.]*/mU", $body, $aMatches); } } |
Zoals je aan de $this-notatie kunt zien is de functie deel van een class. Verder ziet de regexp er zo freaky uit dat ik niet verwachtte dat-ie zou werken, maar anders wist ik het niet. Punt is dat de body kan variëren van:
"QueryPart"
tot:
"In deze zin staat de querypart die we zoeken."
Het volgende probleem is de plaatselijke case-insensitivity, want een zin herken je doorgaans aan de eerste hoofdletter. Een voorafgaande punt is er niet altijd

[ Voor 4% gewijzigd door Verwijderd op 22-02-2005 22:18 ]