que quiero ser capaz de analizar las rutas de archivos como éste:de expresiones regulares para que coincida con un número ilimitado de opciones
/var/www/index.(htm|html|php|shtml)
en una matriz ordenada:
array("htm", "html", "php", "shtml")
y luego producir una lista de alternativas :
/var/www/index.htm
/var/www/index.html
/var/www/index.php
/var/www/index.shtml
en este momento, tiene declaración preg_match
que puede dividir dos alternativas:
preg_match_all ("/\(([^)]*)\|([^)]*)\)/", $path_resource, $matches);
Podría alguien darme un puntero cómo extender esto a aceptar una ilimitado número de alternativas (al menos dos)? Solo con respecto a la expresión regular, el resto puedo tratarlo.
La regla es:
La lista debe comenzar con una
(
y cerrar con un)
Debe haber un
|
en la lista (es decir, al menos dos alternativas)Cualquier otra aparición (es) de
(
o)
deben permanecer intactas.
Actualización: tengo que ser capaz de tratar también con múltiples pares de soportes tales como:
/var/(www|www2)/index.(htm|html|php|shtml)
lo siento, no he dicho eso de inmediato.
Actualización 2: Si usted está buscando para hacer lo que estoy tratando de hacer en el sistema de archivos, a continuación, señalar que glob() ya trae esta funcionalidad fuera de la caja. No hay necesidad de implementar una solución personalizada. Ver la respuesta de @ Gordon a continuación para más detalles.
¿Por qué diablos está todo el mundo * * obsesionado ** con expresiones regulares? Solo usa un maldito método diferente. Coincidir todo después de un corchete ** no es difícil ** sin expresiones regulares. –
@Coronatus muéstrame un método elegante, liviano y no regex que puede 1. lidiar con múltiples pares de corchetes y 2. ignorar cualquier par de corchetes que no contenga '|', y no se ve como una mierda, y yo ' Con gusto te llamaré mi sombrero. –
Hecho. Ver mi respuesta –