file_get_contents + preg_match > vind regel met word
Hi!
Ik heb een lijst met woorden in een txt file, 400 en meer, op elke regel 1 woord.
Op mijn site worden de zoekwoorden opgeslagen in bovengenoemde text file.
Nu kan een Admin deze txt doorzoeken of een woord hierin voorkomt met een input search.
Wat ik ook probeer ik krijg niet de gewenste regelnummer waarop dat woord staat.
Ik krijg het maar niet voor elkaar om MyParam te weizigen in de variabel $dosearch
Weet iemand wellicht hoe dit te doen?
Ik heb een lijst met woorden in een txt file, 400 en meer, op elke regel 1 woord.
Op mijn site worden de zoekwoorden opgeslagen in bovengenoemde text file.
Nu kan een Admin deze txt doorzoeken of een woord hierin voorkomt met een input search.
Wat ik ook probeer ik krijg niet de gewenste regelnummer waarop dat woord staat.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$dosearch = trim($_POST['dosearch']);
$mysearch = file_get_contents("search/search.log");
preg_match('/^MyParam[^\r\n]*/m', $text, $matches);
var_dump($matches[0]);
$mysearch = file_get_contents("search/search.log");
preg_match('/^MyParam[^\r\n]*/m', $text, $matches);
var_dump($matches[0]);
Ik krijg het maar niet voor elkaar om MyParam te weizigen in de variabel $dosearch
Weet iemand wellicht hoe dit te doen?
Op deze pagina staat een voorbeeld hoe je variabelen gebruikt.
Even naar beneden scrollen bij het kopje offset.
https://www.php.net/manual/en/function.preg-match.php
Even naar beneden scrollen bij het kopje offset.
https://www.php.net/manual/en/function.preg-match.php
Zeer bedankt voor de snelle reactie!.. het probleem blijft echter bestaan.
Er word een voorbeeld gegeven $pattern = '/^def/'; waarin op def word gezocht.(in mijn voorbeeld is dat MyParam)
Ik wil nu zoeken op een variable, dus ipv def zoeken op $dosearch
Er word een voorbeeld gegeven $pattern = '/^def/'; waarin op def word gezocht.(in mijn voorbeeld is dat MyParam)
Ik wil nu zoeken op een variable, dus ipv def zoeken op $dosearch
Dan wel de zoekterm escapen:
Maar dan heb je nog steeds niet de index ...
Maar als het doel is "een woord in een array vinden" (en niet "een deel van een woord"), dan kan je ook
En als je ook op een deel van een woord wilt matchen:
Opmerkingen:
- begint bij 0 te tellen, dus $index = 5 is "regel 6"
- gebruik strpos() ipv stripos() als je case sensitive wilt zoeken
- gebruik === 0 ipv !== false als de gezochte tekst aan het begin van het woord moet staan
- niet elk probleem is een regex ;-)
Maar dan heb je nog steeds niet de index ...
Maar als het doel is "een woord in een array vinden" (en niet "een deel van een woord"), dan kan je ook
Code (php)
1
2
2
$words = file("search/search.log",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$index = array_search($dosearch,$words); //false indien niet gevonden
$index = array_search($dosearch,$words); //false indien niet gevonden
En als je ook op een deel van een woord wilt matchen:
Code (php)
1
2
3
4
2
3
4
$words = file("search/search.log",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($words as $index => $word)
if(stripos($word,$dosearch) !== false)
print("Het gezochte woord staat op regel $index\n");
foreach($words as $index => $word)
if(stripos($word,$dosearch) !== false)
print("Het gezochte woord staat op regel $index\n");
Opmerkingen:
- begint bij 0 te tellen, dus $index = 5 is "regel 6"
- gebruik strpos() ipv stripos() als je case sensitive wilt zoeken
- gebruik === 0 ipv !== false als de gezochte tekst aan het begin van het woord moet staan
- niet elk probleem is een regex ;-)
Gewijzigd op 24/02/2025 19:44:31 door Rob Doemaarwat
Hi!
stripos geeft inderdaad ook een deel van een woord.. dus zoeken op wagenwiel geeft als eerste resultaat "wagen"
Maar ik ga weer aan de slag en laat het weten..
meer info:
Ik had deze om een exact woord te zoeken in een lijst en werkt prima (niet hoofdletter gevoelig)
maar op welke regel deze staat??
deze werkt helaas niet...
stripos geeft inderdaad ook een deel van een woord.. dus zoeken op wagenwiel geeft als eerste resultaat "wagen"
Maar ik ga weer aan de slag en laat het weten..
meer info:
Ik had deze om een exact woord te zoeken in een lijst en werkt prima (niet hoofdletter gevoelig)
maar op welke regel deze staat??
deze werkt helaas niet...
Gewijzigd op 24/02/2025 20:14:17 door Vink Jansen
Ik zou zoals Rob al noemt file() gebruiken ipv file_get_contents().
Dan splitst php het direct voor je op in losse regels. Of in woorden als er 1 woord per regel staat.
Dan zoek je in je array en vind je de regel (al dan niet +/-1)
Maar, wat als je na verloop van tijd 85000 woorden/ regels in je file hebt?
Dan wordt het zwaarder en zwaarder.
En wat doe je met dubbelen?
Waarom geen gebruik gemaakt van een database? Dan kun je ook meer info kwijt, zoals een tijdstip bijvoorbeeld.
Dan splitst php het direct voor je op in losse regels. Of in woorden als er 1 woord per regel staat.
Dan zoek je in je array en vind je de regel (al dan niet +/-1)
Maar, wat als je na verloop van tijd 85000 woorden/ regels in je file hebt?
Dan wordt het zwaarder en zwaarder.
En wat doe je met dubbelen?
Waarom geen gebruik gemaakt van een database? Dan kun je ook meer info kwijt, zoals een tijdstip bijvoorbeeld.
Gewijzigd op 24/02/2025 20:50:18 door Ivo P
Hi,
Ik wil jullie graag zeer bedanken voor de suggesties!
Nu, na veel proberen heb ik eindelijk het gewenste resultaat en wil dat graag delen.
test.php
een geweldige jquery plugin om een textarea van regelnummers te voorzien:
JQueryLinedText
en de gebruikte code om een woord te zoeken in de lijst
Ik wil jullie graag zeer bedanken voor de suggesties!
Nu, na veel proberen heb ik eindelijk het gewenste resultaat en wil dat graag delen.
test.php
een geweldige jquery plugin om een textarea van regelnummers te voorzien:
JQueryLinedText
en de gebruikte code om een woord te zoeken in de lijst
Ik ben nog wel benieuwd of je zoekt in losse woorden en die dan geheel wilt vinden.
Wat kan er in je file staan?
Zoek je in "de kar heeft 4 wagenwielen"
of staan die woorden los?
En als je zoekt op "wagen" wil je dan wel of niet "wagenwielen" vinden?
preg-functies zijn vaak niet heel efficiënt als je op vaste tekst zoekt. Die zijn meer bedoeld om te zoeken naar "een getal gevolgd door een tekst waarin Wiel" staat."
Wat kan er in je file staan?
Zoek je in "de kar heeft 4 wagenwielen"
of staan die woorden los?
En als je zoekt op "wagen" wil je dan wel of niet "wagenwielen" vinden?
preg-functies zijn vaak niet heel efficiënt als je op vaste tekst zoekt. Die zijn meer bedoeld om te zoeken naar "een getal gevolgd door een tekst waarin Wiel" staat."
Ik begrijp wat je bedoeld maar heb gemerkt dat het vreselijk moeilijk is om een goede zoekmachine te bouwen.
Het is na veel moeite gelukt om de titel en omschrijving van alle advertenties te doorzoeken op 1 zoekwoord.
De meeste zoekmachines die ik gezien heb werken alle met LIKE.. dit geeft net als strpos ook delen van woorden als resultaat
Dat werkt vooralsnog best wel goed maar je hebt gelijk dat zoeken op een combinatie van woorden beter is.
Soms merk je dat zelfs Marktplaats hier moeite mee heeft.. :)
Het is na veel moeite gelukt om de titel en omschrijving van alle advertenties te doorzoeken op 1 zoekwoord.
De meeste zoekmachines die ik gezien heb werken alle met LIKE.. dit geeft net als strpos ook delen van woorden als resultaat
Dat werkt vooralsnog best wel goed maar je hebt gelijk dat zoeken op een combinatie van woorden beter is.
Soms merk je dat zelfs Marktplaats hier moeite mee heeft.. :)
Gewijzigd op 25/02/2025 16:45:50 door Vink Jansen
Je kan natuurlijk ook met Sphinx of ElasticSearch in de weer gaan om een goede zoekbackend op te zetten als je echt heel veel data hebt.




