Acceder al parametro array de preg_match_all

Iniciado por franfis, 23 Marzo 2014, 19:03 PM

0 Miembros y 1 Visitante están viendo este tema.

franfis

Hola amigos, en el siguiente codigo:
Código (Php) [Seleccionar]
<?php
$nombre
=array("primero","esg/ndo","tercero","cu\rto","qui\"n\"to","sexto","septi*o","octavo","noveno");
for(
$i=0;$i<=8;$i++){
preg_match_all("/.*?([\\/:\*\?\"<>|])/"$nombre[$i] ,$outPREG_PATTERN_ORDER);
var_dump($out);

}
?>


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 (php) [Seleccionar]
array
 0 =>
   array
     empty
 1 =>
   array
     empty
array
 0 =>
   array
     0 => string 'esg/' (length=4)
 1 =>
   array
     0 => string '/' (length=1)
array
 0 =>
   array
     empty
 1 =>
   array
     empty
array
 0 =>
   array
     empty
 1 =>
   array
     empty
array
 0 =>
   array
     0 => string 'qui"' (length=4)
     1 => string 'n"' (length=2)
 1 =>
   array
     0 => string '"' (length=1)
     1 => string '"' (length=1)
array
 0 =>
   array
     empty
 1 =>
   array
     empty
array
 0 =>
   array
     0 => string 'septi*' (length=6)
 1 =>
   array
     0 => string '*' (length=1)
array
 0 =>
   array
     empty
 1 =>
   array
     empty
array
 0 =>
   array
     empty
 1 =>
   array
     empty

Como podria acceder a *, /, " dentro del for?

Gracias por cualquier sugerencia.

#!drvy

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


franfis

#2
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.
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

#!drvy

Me alegro de que lo hayas solucionado.. pero estas cometiendo crímenes contra la humanidad usando el for de ese modo ·_·

Saludos

engel lex

Cita de: #!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


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

Código (php) [Seleccionar]

$nombre = array("primero", "esg/ndo", "tercero", "cu\rto", "qui\"n\"to", "sexto", "septi*o", "octavo", "noveno");
foreach ($nombre as $valor) {
    preg_match_all("/.*?([\\/:\*\?\"<>|])/", $valor, $out, PREG_PATTERN_ORDER);

    foreach ($out as $primero) {
        foreach ($primero as $segundo) {
            echo $segundo . "  -------  " . $valor . "<br>";
        }
    }
}


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.