2011-08-04 51 views
5

Tôi có nhiều chuỗi không và tôi cần kiểm tra xem mỗi chuỗi có chứa màu hay không.Tìm xem chuỗi con có tồn tại trong một chuỗi

Ví dụ:

  • Một con chim trên bầu trời
  • 22 đường phố của Pháp
  • Con chó có màu xanh
  • Con mèo là màu đen và trắng

Vì vậy, hai chuỗi cuối cùng phải trả về true.

Cách tốt nhất để tìm nó là gì?

Regex hoặc kiểm tra với bất kỳ chất nền nào()?

Trả lời

8

Trong regexp bạn có thể viết

preg_match_all("/(red|blue|black|white|etc)/", $haystack, $matches); 

print_r($matches); 

Sử dụng một vòng lặp cho tất cả các dây, và bạn sẽ dễ dàng nhận thấy đó các giá trị từ $ phù hợp mà bạn cần.

1

strpos hoặc strripos trong php sẽ có thể tìm kiếm một từ trong một chuỗi. Bạn có thể phải lặp lại để tìm kiếm tất cả các màu nếu sử dụng nó

+0

cũng thấy ví dụ ở đâu đó về eregi eregi ("(this | that)", $ str) // tìm thấy giá trị này hoặc $ str – Tommy

23

Tôi luôn làm việc với strpos vì nó có vẻ là giải pháp thay thế nhanh nhất (không biết về regex).

if(strpos($haystack, $needle) !== FALSE) return $haystack; 
+0

Tôi tìm thấy hàm sử dụng strpos, với một mảng kim $ – bahamut100

+3

strpos không trả về TRUE, nhưng nó trả về FALSE để bạn có thể làm 'if (strpos ($ haystack, $ kim)! == FALSE) trả về $ haystack;' và một điều cần nhớ là nếu bạn đang tìm kiếm 'red 'sau đó' fred' cũng sẽ trả lại kết quả. – pathfinder

+0

@pathfinder Bạn hoàn toàn đúng, có vẻ như tôi không chú ý :) Cảm ơn bạn đã chỉ ra. – Quasdunk

3

nếu bạn sẽ sử dụng strpos sau đó nó trả về một vị trí của một chuỗi nó sẽ trả về một số 1,2,3 vv không đúng hoặc sai.

Và vấn đề khác là nếu chuỗi tồn tại lúc bắt đầu, nó sẽ trả về 0 mà sẽ được coi là sai sau đó strpos không thể tìm thấy từ đó.

+2

Chỉ cần sử dụng toán tử === – rluks