Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: franfis en 23 Marzo 2014, 19:03 pm



Título: Acceder al parametro array de preg_match_all
Publicado por: franfis en 23 Marzo 2014, 19:03 pm
Hola amigos, en el siguiente codigo:
Código
  1. <?php
  2. $nombre=array("primero","esg/ndo","tercero","cu\rto","qui\"n\"to","sexto","septi*o","octavo","noveno");
  3. for($i=0;$i<=8;$i++){
  4. preg_match_all("/.*?([\\/:\*\?\"<>|])/", $nombre[$i] ,$out, PREG_PATTERN_ORDER);
  5. var_dump($out);
  6.  
  7. }
  8. ?>
  9.  
Estoy intentando acceder a los caracteres que / \*?:<>| que son los que windows no acepta como nombre de archivo. El resultado del codigo es;
Código
  1.  0 =>
  2.    array
  3.      empty
  4.  1 =>
  5.    array
  6.      empty
  7.  0 =>
  8.    array
  9.      0 => string 'esg/' (length=4)
  10.  1 =>
  11.    array
  12.      0 => string '/' (length=1)
  13.  0 =>
  14.    array
  15.      empty
  16.  1 =>
  17.    array
  18.      empty
  19.  0 =>
  20.    array
  21.      empty
  22.  1 =>
  23.    array
  24.      empty
  25.  0 =>
  26.    array
  27.      0 => string 'qui"' (length=4)
  28.      1 => string 'n"' (length=2)
  29.  1 =>
  30.    array
  31.      0 => string '"' (length=1)
  32.      1 => string '"' (length=1)
  33.  0 =>
  34.    array
  35.      empty
  36.  1 =>
  37.    array
  38.      empty
  39.  0 =>
  40.    array
  41.      0 => string 'septi*' (length=6)
  42.  1 =>
  43.    array
  44.      0 => string '*' (length=1)
  45.  0 =>
  46.    array
  47.      empty
  48.  1 =>
  49.    array
  50.      empty
  51.  0 =>
  52.    array
  53.      empty
  54.  1 =>
  55.    array
  56.      empty
Como podria acceder a *, /, " dentro del for?

Gracias por cualquier sugerencia.


Título: Re: Acceder al parametro array de preg_match_all
Publicado por: #!drvy en 24 Marzo 2014, 21:06 pm
No entiendo el propósito de esto. Ni el sentido ni nada... podrías explicarte ? ¿A que te refieres con "acceder a" ?

PD: Si solo vas a recorrer un array usa foreach en vez de for.

Saludos



Título: Re: Acceder al parametro array de preg_match_all
Publicado por: franfis en 24 Marzo 2014, 23:43 pm
Me refería a como imprimir con echo a los caracteres especificados en el regex por ejemplo al asterisco o a la comilla, como estaba en array de arrays. Pero este código.
Código:
if(preg_match_all("/[\\/:\*\?\"<>|]/", $nombre[$i] ,$out, PREG_PATTERN_ORDER)==true)

for ($z = 0;$z < count($out);$z++){
        for ($x = 0;$x < count($out[$z]);$x++) {
echo $out[$z][$x]."  -------  ".$nombre[$i]."<br>";
        }
}
Creo que soluciona mi pregunta, sin ningún grupo de captura en el regex el array $out es mas simple de manejar.

Esos caracteres son los que dan error cuando intetas asignar como nombre de archivo o carpeta en windows.

Saludos


Título: Re: Acceder al parametro array de preg_match_all
Publicado por: #!drvy en 25 Marzo 2014, 01:52 am
Me alegro de que lo hayas solucionado.. pero estas cometiendo crímenes contra la humanidad usando el for de ese modo ·_·

Saludos


Título: Re: Acceder al parametro array de preg_match_all
Publicado por: engel lex en 25 Marzo 2014, 08:38 am
Me alegro de que lo hayas solucionado.. pero estas cometiendo crímenes contra la humanidad usando el for de ese modo ·_·

Saludos


cierto... que tal si simplificas un poco con foreach...

Código
  1. $nombre = array("primero", "esg/ndo", "tercero", "cu\rto", "qui\"n\"to", "sexto", "septi*o", "octavo", "noveno");
  2. foreach ($nombre as $valor) {
  3.    preg_match_all("/.*?([\\/:\*\?\"<>|])/", $valor, $out, PREG_PATTERN_ORDER);
  4.  
  5.    foreach ($out as $primero) {
  6.        foreach ($primero as $segundo) {
  7.            echo $segundo . "  -------  " . $valor . "<br>";
  8.        }
  9.    }
  10. }
  11.