2010-04-29 37 views
5

Giả sử nó là một câu hỏi nub, nhưng là có một tương tự của chức năng LIKE mysql trong php?PHP tương tự của mysql như chức năng

Vì vậy, ví dụ: :

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

Tôi biết rullez regex, nhưng không biết giải pháp nào để đạt được điều này

Trả lời

6

Hãy nhìn vào các fnmatch chức năng.

+5

Trước 5.3, điều này chỉ hoạt động trên Linux (có thể không phải là một vấn đề, chỉ là FYI). – notJim

+0

@notJim, cảm ơn cho cải chính, mặc dù nó không thực sự là một vấn đề :) – DCrystal

0

Trong trường hợp các dây bạn muốn kết hợp thực sự tập tin trong một thư mục, hãy kiểm tra các chức năng glob: http://php.net/manual/en/function.glob.php

+3

Điều đó thậm chí không gần giống như vậy. – notJim

+0

glob() là tốt, nhưng nó không thể được sử dụng với các chuỗi thông thường, tôi giả sử ... – DCrystal

+0

Cảm ơn bạn đã chỉ ra rằng 'glob()' là dành riêng cho các tệp trong thư mục, không phải chuỗi tùy ý. Tôi đã chỉnh sửa câu trả lời để làm rõ. –

3

tất cả những kịch bản có thể được thực hiện với strpos

+0

Cảm ơn, tôi chỉ không muốn làm một bánh xe khác :) – DCrystal

+0

làm thế nào là chất nền tốt cho điều này ?! phải là một số sử dụng mới cho nó? – OIS

+0

lol ... Tôi có nghĩa là strpos – Rich

8

Đối với người đầu tiên, sử dụng strpos:

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

Người tiếp theo, bạn có thể sử dụng strpos:

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

Tiếp theo bạn chỉ có thể sử dụng tương đương với:

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

Trong số Tất nhiên, bạn có thể sử dụng regex cho tất cả chúng:

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

Sửa: để chuyển đổi mô hình của bạn để regex, đặt một ^ ngay từ đầu, và một $ ở cuối, sau đó thay thế * với .* và thoát . s.

Các vấn đề liên quan