2011-08-04 22 views
5

Tengo muchas cadenas y debo verificar si cada una de ellas contiene un color.Buscar si existe una subcadena en una cadena

Por ejemplo:

  • Un pájaro en el cielo
  • 22 de la calle de Francia
  • El perro es de color azul
  • El gato es blanco y negro

Por lo tanto, la dos últimas cuerdas deben volverse verdaderas.

¿Cuál es la mejor manera de encontrarlo?

Regex, o consultar con cualquier substr()?

Respuesta

8

En expresión regular puede escribir

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

print_r($matches); 

utilizar un bucle para todas las cuerdas, y usted notará fácilmente cuál de los valores de $ coincide con lo que necesita.

1

strpos o strripos en php deberían ser capaces de buscar una sola palabra en una cadena. Es posible que deba realizar un bucle para buscar todos los colores si lo usa

+0

también vi un ejemplo en algún lugar sobre eregi eregi ("(this | that)", $ str) // encuentra esto o aquello en $ str – Tommy

23

Siempre trabajo con strpos ya que parece ser la alternativa más rápida (sin embargo, no sé sobre la expresión regular).

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

He encontrado una función que usa strpos, con una matriz de $ agujas – bahamut100

+3

strpos no devuelve TRUE, pero devuelve FALSE para que pueda hacer 'if (strpos ($ haystack, $ needle)! == FALSE) return $ haystack;' y otra cosa para recordar es si estaba buscando 'red 'then' fred' también devolvería un resultado. – pathfinder

+0

@pathfinder Tienes toda la razón, parece que no estaba prestando atención :) Gracias por señalarlo. – Quasdunk

3

si usa strpos entonces devuelve una posición de una cadena, devolverá un número 1,2,3 etc. no verdadero o falso.

Y el otro problema es si la cadena existe al inicio, devolverá 0 que considerará como falso, entonces strpos no puede encontrar esa palabra.

+2

Simplemente use el operador === – rluks

Cuestiones relacionadas