sirve que preg_match preg_grep preg para example coincidencias buscar array php regex arrays preg-match

que - preg_match function in php



¿Cómo buscar en una matriz con preg_match? (4)

Puede usar array_walk para aplicar su función preg_match a cada elemento de la matriz.

http://us3.php.net/array_walk

¿Cómo busco en una matriz con preg_match?

Ejemplo:

<?php if( preg_match( ''/(my/n+string/n+)/i'' , array( ''file'' , ''my string => name'', ''this'') , $match) ) { //Excelent!! $items[] = $match[1]; } else { //Ups! not found! } ?>


Use preg_grep

$array = preg_grep( ''/(my/n+string/n+)/i'', array( ''file'' , ''my string => name'', ''this'') );


En esta publicación, te proporcionaré tres métodos diferentes para hacer lo que pides. De hecho, recomiendo usar el último fragmento, ya que es más fácil de comprender y también bastante claro en el código.

¿Cómo veo qué elementos en una matriz coinciden con mi expresión regular?

Hay una función dedicada solo para este propósito, preg_grep . Tomará una expresión regular como primer parámetro y una matriz como el segundo.

Vea el siguiente ejemplo:

$haystack = array ( ''say hello'', ''hello '', ''hello world'', ''foo bar bas'' ); $matches = preg_grep (''/^hello (/w+)/i'', $haystack); print_r ($matches);

salida

Array ( [1] => hello [2] => hello world )

Documentación

Pero solo quiero obtener el valor de los grupos especificados. ¿Cómo?

array_reduce con preg_match puede resolver este problema de manera limpia; mira el fragmento a continuación.

$haystack = array ( ''say hello'', ''hello '', ''hello world'', ''foo bar bas'' ); function _matcher ($m, $str) { if (preg_match (''/^hello (/w+)/i'', $str, $matches)) $m[] = $matches[1]; return $m; } // N O T E : // ------------------------------------------------------------------------------ // you could specify ''_matcher'' as an anonymous function directly to // array_reduce though that kind of decreases readability and is therefore // not recommended, but it is possible. $matches = array_reduce ($haystack, ''_matcher'', array ()); print_r ($matches);

salida

Array ( [0] => [1] => world )

Documentación

Usar array_reduce parece tedioso, ¿no hay otra manera?

Sí, y este es realmente más limpio, aunque no implica el uso de ninguna función preexistente array_* o preg_* .

Envuélvalo en una función si va a utilizar este método más de una vez.

$matches = array (); foreach ($haystack as $str) if (preg_match (''/^hello (/w+)/i'', $str, $m)) $matches[] = $m[1];

Documentación


$items = array(); foreach ($haystacks as $haystack) { if (preg_match($pattern, $haystack, $matches) $items[] = $matches[1]; }