2010-04-29 3 views
5

Supposons que ce soit une question nub, mais y a-t-il un analogue de la fonction LIKE de mysql en php?Analogique PHP de la fonction mysql like

Ainsi, par exemple. :

like('goo*','google.com');//is true 
like('*gl*','google.com');//true 
like('google.com','google.com')//also true 

Je sais rullez regex, mais je ne sais pas de solution pour atteindre cet

Répondre

6

Jetez un oeil à la fonction fnmatch.

+5

Avant 5.3, cela ne fonctionne que sur Linux (probablement pas un problème, juste FYI.) – notJim

+0

@notJim, merci pour la rectification, même si ce n'est pas vraiment un problème :) – DCrystal

0

Dans le cas où les chaînes que vous souhaitez correspondre sont des fichiers réellement dans un répertoire, consultez la fonction glob: http://php.net/manual/en/function.glob.php

+3

Ce n'est même pas proche de la même chose. – notJim

+0

glob() est bien, mais il ne peut pas être utilisé avec des chaînes habituelles, je suppose ... – DCrystal

+0

Merci de préciser que 'glob()' est spécifique aux fichiers dans un répertoire, pas de chaînes arbitraires. J'ai édité la réponse pour clarifier. –

3

tous ces scénarios peut être accompli avec strpos

+0

Merci, je ne veux pas faire une autre roue :) – DCrystal

+0

comment est-ce que substr est bon pour ça ?! doit être une nouvelle utilisation pour cela? – OIS

+0

lol ... Je voulais dire strpos – Rich

8

Pour la première, utilisez strpos:

like('goo*','google.com');  --> strpos('goo','google.com') === 0 

Le prochain, vous pouvez utiliser strpos:

like('*gl*','google.com');  --> strpos('gl', 'google.com') !== false; 

La prochaine fois que vous pouvez simplement utiliser Égale:

like('google.com','google.com') --> 'google.com' == 'google.com' 

de Bien sûr, vous pouvez utiliser regex pour tous:

like('goo*','google.com');  --> preg_match('#^goo.*$#','google.com') 
like('*gl*','google.com');  --> preg_match('#^.*gl.*$#', 'google.com'); 
like('google.com','google.com') --> preg_match('#^google\.com$#', 'google.com') 

Modifier: pour convertir vos habitudes de regex, placez un ^ au début, et un $ à la fin, puis remplacez * avec .* et échapper . s.