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.
¿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];
}