2010-04-29 55 views
5

假設它是一個nub問題,但是在PHP中有沒有類似mysql的LIKE函數?mysql的模擬類似函數

因此,例如:

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

我知道正則表達式rullez,但不知道有什麼解決辦法達到這個

回答

6

完成看一看的fnmatch功能。

+5

在5.3之前,這隻適用於Linux(可能不是問題,只是FYI。) – notJim 2010-04-29 17:59:11

+0

@notJim,感謝您的糾正,儘管這不是問題:) – DCrystal 2010-04-29 18:01:08

0

如果你想匹配字符串實際上是目錄中的文件,檢查出glob功能:http://php.net/manual/en/function.glob.php

+3

這甚至沒有接近同一件事。 – notJim 2010-04-29 17:43:54

+0

glob()很好,但它不能用於通常的字符串,我想... – DCrystal 2010-04-29 17:44:32

+0

感謝您指出'glob()'是特定於目錄中的文件,而不是任意字符串。我編輯了答案來澄清。 – 2010-04-30 13:24:41

3

所有這些情景可以用strpos

+0

謝謝,我只是不想讓另一個輪子:) – DCrystal 2010-04-29 17:59:43

+0

substr好嗎?必須有一些新的用途呢? – OIS 2010-04-29 18:26:20

+0

lol ...我的意思是strpos – Rich 2010-04-29 19:14:40

8

對於第一個,使用strpos

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

下一個,你可以使用strpos

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

你可以用下等於:

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

中當然,你可以使用所有的正則表達式:

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

編輯:轉換你的模式,以正則表達式,放置^開頭,並且$底,然後更換*.*和逃生.秒。