Puede preg_match () (u otra función de expresiones regulares de PHP) que coincida con un número variable de sub-patrones entre paréntesis?
-
18-09-2019 - |
Pregunta
Supongamos que tengo '/srv/www/site.com/htdocs/system/application/views/'
y quiero probarla contra una expresión regular que coincide con cada nombre de directorio en la ruta?
Algo como este patrón: '(/[^/])'
Que produce una matriz con 'srv','www','site.com'...
etc.
PS:. La sintaxis de expresiones regulares que escribí es sólo para ilustrar, no está probado y seguramente mal, pero sólo para dar una idea
PS2:. Sé que hay explode()
pero vamos a ver si podemos hacer esto con una expresión regular (es útil para otros idiomas y los marcos de las cuales no tienen explotar)
Solución
$str = '/srv/www/site.com/htdocs/system/application/views/';
preg_match_all('/\/([^\/]+)/', $str, $matches);
// $matches[0] contains matching strings
// $matches[1] contains first subgroup matches
print_r($matches[1]);
Salida:
Array
(
[0] => srv
[1] => www
[2] => site.com
[3] => htdocs
[4] => system
[5] => application
[6] => views
)
Otros consejos
No es preg_split
para dividir archivos en expresiones regulares similar a explotar, y luego está preg_match_al
l que hace lo que quiere.
No creo que pueda, pero se puede usar en lugar preg_match_all () para obtener múltiples concordancias de una expresión regular. También hay preg_split () que puede ser más apropiado.