Hola amigos, en el siguiente codigo:
<?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] ,$out, PREG_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;
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.
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
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
Me alegro de que lo hayas solucionado.. pero estas cometiendo crímenes contra la humanidad usando el for de ese modo ·_·
Saludos
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...
$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>";
}
}
}