Todavía estoy aprendiendo mucho sobre PHP y la alteración de cadenas es algo que me interesa. He usado preg_match antes para cosas como validar una dirección de correo electrónico o simplemente buscar consultas.¿Cómo preg_match_all() procesa cadenas?
Acabo de salir de esta publicación What's wrong in my regular expression? y tenía curiosidad por saber por qué la función preg_match_all produce 2 cadenas, 1 w/algunos de los caracteres eliminados y luego el otro con el resultado deseado.
Por lo que entiendo acerca de la función es que va sobre la cadena carácter por carácter utilizando el RegEx para evaluar qué hacer con él. ¿Podría este RegEx se ha estructurado de tal manera que omitir la primera entrada de matriz y solo producir el resultado deseado?
y por lo que no tiene que ir al otro hilo
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
[email protected]~';
preg_match_all('/\^([^^]*?)\~/', $str, $newStr);
for($i=0;$i<count($newStr[0]);$i++)
{
echo $newStr[0][$i].'<br>';
}
echo '<br><br><br>';
for($i=0;$i<count($newStr[1]);$i++)
{
echo $newStr[1][$i].'<br>';
}
Esta es la salida
^~ Jony
^~ Smith
^[email protected]~
Jony
Smith
[email protected]
Tengo curiosidad por saber si el motivo de 2 entradas de matriz fue debido a la sintaxis original de la cadena o si es la respuesta de procesamiento normal de la función. Lo siento si esto no debería estar aquí, pero tengo mucha curiosidad sobre cómo funciona esto.
gracias, Brodie
La salida siempre contendrá la coincidencia completa y una entrada para cada grupo de captura en su expresión. –
No es una respuesta, pero interesante notar aquí es el indicador 'PREG_SET_ORDER', que devolverá una lista de resultados más simple. Y aunque no puede eliminar la entrada de matriz '[0]' para la coincidencia completa, puede quitar su contenido usando '\ K' en la expresión regular. – mario