2010-04-29 16 views
5

Załóżmy, że jest to pytanie nub, ale czy istnieje analog funkcji LYSE mysql w php?Analog PHP z funkcją podobną do mysql

Tak, np. :

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

wiem regex rullez, ale nie wiem, jakieś rozwiązanie, aby osiągnąć ten

Odpowiedz

6

Spójrz na funkcji fnmatch.

+5

Przed 5.3, działa to tylko na Linuksie (prawdopodobnie nie jest to problem, tylko FYI.) – notJim

+0

@notJim, dziękuję za rektyfikację, chociaż to naprawdę nie jest problem :) – DCrystal

0

W przypadku ciągów chcesz dopasować rzeczywistości są pliki w katalogu, sprawdź funkcję glob: http://php.net/manual/en/function.glob.php

+3

To nie jest nawet bliskie tego samego. – notJim

+0

glob() jest w porządku, ale nie można go używać ze zwykłymi ciągami, przypuszczam ... – DCrystal

+0

Dzięki za wskazanie, że 'glob()' jest specyficzne dla plików w katalogu, a nie arbitralne ciągi. Zmieniłem odpowiedź, aby wyjaśnić. –

3

wszystkich tych scenariuszy może być dokonany z strpos

+0

Dzięki, po prostu nie chcę zrobić innego koła :) – DCrystal

+0

jak substr jest dobry ?! musi być jakiś nowy użytek? – OIS

+0

lol ... Miałem na myśli strpos – Rich

8

Na pierwszy użyć strpos:

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

następnego, można użyć strpos:

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

Następny można po prostu użyć równa:

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

Of Oczywiście, możesz użyć wyrażenia regularnego dla nich wszystkich:

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') 

Edit: konwertować swoje wzorce do regex, umieść ^ na początku i na końcu $, a następnie zastąpić * z .* i uciec . s.