MYSQL REGEXP en wildcard
Code (php)
1
2
3
4
5
2
3
4
5
$str_search = 'kbleismtr';
$otvsql = "SELECT woord FROM woorden_feud WHERE woord REGEXP '^[{". mysqli_real_escape_string($DBconn, $str_search)."}]+$'";
// Haalt bv de woorden klim, biet, trim ect op
$otvsql = "SELECT woord FROM woorden_feud WHERE woord REGEXP '^[{". mysqli_real_escape_string($DBconn, $str_search)."}]+$'";
// Haalt bv de woorden klim, biet, trim ect op
Nu wil ik de vraagteken ? als wildcard gebruiken, dus als mensen deze erbij invoeren dat er wordt gezocht met de letters:
$str_search = 'kbleismtra'; // met a erbij
$str_search = 'kbleismtrb'; // met b erbij
$str_search = 'kbleismtrc'; // met c erbij
Tot en met z.
Nu zat ik te denken om dat met een foreach loop te doen met de letters a tot en met z maar dat gaat niet ivm de laadtijd.
Hoe kan ik de REGEXP aanpassen dat er woorden opgehaald kunnen worden met een wildcard.
- Waarom staan die accolades d'r in ( ^[letters]+$ is voldoende)?
- Als je zoekt op de letters 'hio' vind je nu 'hoi', maar ook 'hooi'. Is dat de bedoeling (ik zie een verwijzing naar Word Feud - volgens mij heb je daar een beperkte collectie letters, net als bij Scrabble)?
- Moeten alle letters d'r in zitten, of zoek je gewoon alle woorden met 1 of meer van de letters (zo werkt het nu - dus met je voorbeeld van 'kbleismtr' vind je 'mis', 'blik', 'klemt', enz)?
Niet alle letters hoeven erin te zitten, als er maar woorden van gemaakt kunnen worden.
Toevoeging op 07/01/2018 19:57:57:
Dus ik wou graag weten hoe ik de REGEXP kan aanpassen dat er ook woorden gevonden worden met een extra letter.
REGEXP '^[". mysqli_real_escape_string($DBconn, $str_search)."]+$'
REGEXP '^[". mysqli_real_escape_string($DBconn, $str_search)."]+[a-z]+$' ?????????????
Maar er mag met de wildcard dan maar 1 letter per woord erbij komen.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$alphas = range('a', 'z');
for($i = 0; $i < count($alphas); $i++) {
$str_search = str_replace('?', $alphas[$i], $str_search);
$otvsql = "SELECT woord FROM woorden_feud WHERE woord REGEXP '^[". mysqli_real_escape_string($DBconn, $str_search)."]+$'";
}
for($i = 0; $i < count($alphas); $i++) {
$str_search = str_replace('?', $alphas[$i], $str_search);
$otvsql = "SELECT woord FROM woorden_feud WHERE woord REGEXP '^[". mysqli_real_escape_string($DBconn, $str_search)."]+$'";
}
Dit werkt nu gedeeltelijk, alleen met de A. ook gooit hij de woorden 24 x dubbel
In bovenstaande situatie wordt dat dus zoiets als ... WHERE woord LIKE 'kbleismtr_' ...