delphi parsing freepascal url-parsing

Una lib o función Delphi/FreePascal que emula la función parse_url de PHP



parsing url-parsing (5)

El URI RFC enumera esta expresión regular para el análisis de URI:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(/?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9

Donde los números son estos grupos:

$1 = http: $2 = http $3 = //www.ics.uci.edu $4 = www.ics.uci.edu $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Related

Para este URI:

http://www.ics.uci.edu/pub/ietf/uri/#Related

La expresión regular es bastante simple y no utiliza características especiales que la lib de expresión regular debe proporcionar, así que tome una que sea compatible con su implementación pascal y listo.

Estoy haciendo un productor de mapa del sitio en Object Pascal y necesito una buena función o lib para emular la función parse_url en PHP.

¿Alguien sabe de algunos buenos?


No estoy familiarizado con la función parse_url en PHP, pero puede probar la clase TIdURI que se incluye con Indy (que a su vez se incluye con las versiones más recientes de Delphi). Creo que también lo portaron a FreePascal.

TIdURI es un descendiente de TObject que encapsula un identificador de recursos universal, como se describe en el documento de Estándares de Internet:

RFC 1630 - Identificadores universales de recursos en WWW

TIdURI proporciona métodos y propiedades para el ensamblaje y el desmontaje de URI utilizando los componentes que componen el URI, incluidos: protocolo, host, puerto, ruta, documento y marcador.

Si eso no funciona, proporcione un ejemplo específico de lo que está tratando de lograr: qué intenta analizar de una URL .


Freepascal tiene la unidad URIParser con la función ParseURI. Un ejemplo de cómo usarlo se puede encontrar en uno de los ejemplos en la fuente de Freepascal . O un viejo ejemplo que es algo más fácil de entender.



Tenga cuidado con la clase TIdURI de Indy. Se suponía que era un analizador sintáctico de propósito general, pero tiene algunos errores y fallas de diseño que le impiden ser un analizador totalmente compatible. Actualmente estoy en el proceso de escribir una nueva clase desde cero para Indy 11 para reemplazar TIdURI. Será un analizador URI totalmente compatible y también admitirá el análisis IRI (RFC 3987).