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?

StackOverflow https://stackoverflow.com/questions/1294721

  •  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)

¿Fue útil?

Solución

preg_match_all :

$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_all 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top