2010-04-29 22 views
5

Bu bir nub sorunu olduğunu varsayalım, ama php'de mysql's LIKE işlevinin bir analogu var mı? Örneğin, örn. :PHP benzeri mysql işlevi gibi analog

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

ben regex rullez biliyorum ama Eğer eşleştirmek istediğiniz dizeleri bu

cevap

6

ile gerçekleştirilebilir.

+5

5.3'ten önce, bu sadece Linux üzerinde çalışıyor (muhtemelen bir sorun değil, sadece FYI.) – notJim

+0

@ notJim, düzeltme için teşekkürler, aslında sorun değil :) – DCrystal

0

ulaşmak için herhangi bir çözüm bilmiyorum vardır aslında glob fonksiyonunu kontrol, bir dizinde dosyaları: http://php.net/manual/en/function.glob.php

bu senaryoların
+3

Bu, aynı şeylere bile yakın değil. – notJim

+0

glob() iyi, ama her zamanki dizelerle kullanılamaz, sanırım ... – DCrystal

+0

Glob() 'in bir dizindeki dosyalara özgü olduğunu, rastgele dizeler olmadığını belirttiğiniz için teşekkür ederiz. Netleştirmek için cevabı düzenledim. –

3

tüm fnmatch fonksiyonu bir göz atın strpos

+0

Teşekkürler, ben sadece başka bir tekerlek yapmak istemiyorum :) – DCrystal

+0

Bu nasıl altstr iyidir ?! bunun için yeni bir kullanım olmalı? – OIS

+0

lol ... strpos demek – Rich

8

ilk için strpos kullanın:

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

sonraki bir, sen strpos kullanabilirsiniz:

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

sadece kullanabilirsiniz sonraki eşittir:

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

Of Tabii, hepsi için regex kullanabilirsiniz:

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

Düzenleme: o zaman, başında ^ ve sonunda bir $ yerleştirin regex .* ile * değiştirip . s kaçmak için desenleri dönüştürmek için.