Su definitivamente más fácil cuando lo que desea es localizar y eliminar la dirección URL, en lugar de analizar en pedazos.
Si echamos un vistazo
aquí , Podemos obtener una sintaxis simplificada para una dirección URL HTTP.
http://<host>:<port>/<path>?<searchpart>
Malos seguir adelante y comenzar con la de mi patrón, asegurándose de caracteres de escape significativa a las expresiones regulares.
http:\/\/<host>:<port>\/<path>\?<searchpart>
Ahora quiero coger HTTPS, tan mal agregar un cero o una vez "s con el protocolo.
https?:\/\/<host>:<port>\/<path>\?<searchpart>
De la parte superior de mi cabeza, creo <host> puede contener caracteres alfanuméricos, guiones y puntos.
Mirando hacia atrás en ese RFC, eso es sobre la derecha. Por lo menos, era hasta hace poco, cuando se introdujeron los TLD internacionalizados con caracteres no latinos.
Por suerte, incluso con los TLD internacionalizados la sintaxis de una URL aún sigue ese patrón original. Así pues, para dar cuenta de ellos, la enfermedad sólo tienen que utilizar un modelo más genérico para el <host> de lo que normalmente y asegúrese de que sea motor de expresiones regulares estoy utilizando se puede trabajar con conjuntos de caracteres multi-byte.
"Otra cosa que un separador de dos puntos puerto AKA, un separador de ruta también conocido como barra, o cualquier otro tipo de espacios en blanco, tres o más veces" debe hacerlo. Su bastante genérico, pero combinado con el principio y el final del patrón para el ancla no debe haber muchos falsos positivos y cualquier falta se cometió un error en el lado de expulsión.
https?:\/\/[^:\/\s]{3,}:<port>\/<path>\?<searchpart>
El puerto es opcional y siempre estará formado por dígitos. Así que envuelva enfermedad que el artículo en "cero o una vez" sub-patrón, y desde los puertos 1 a 65535 rango III limitar el número de dígitos de 1-5.
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?\/<path>\?<searchpart>
Ahora, el separador de ruta y la ruta también son opcionales, sin embargo no siempre hay un camino cuando los theres un separador de ruta pero siempre hay un separador de ruta cuando los theres un camino. Entonces, ¿qué enfermedad hace es envolver tanto a ambos en un patrón de "cero o una vez" sub, a continuación, ya que un signo de interrogación es lo que marca la siguiente sección de una dirección URL usar mal un algo "que no sean espacios en blanco o un signo de interrogación cero o más veces "después de que el separador de ruta.
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?\?<searchpart>
El <searchpart> funciona de manera similar a la <ruta>.
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?(\?[^\s]*)?
Ahora, una cosa eso no es incluido en el RFC que hay una mención de la <hash> (http://domain.tld/path?searchpart #hash), probablemente porque el hash es usado por el navegador sólo y en realidad nunca envía a un servidor. El <hash> funciona de manera similar a la <searchpart>, pero ninguno de los dos puede existir sin el otro no.
El patrón-como es la voluntad de coger el <hash> ya, pero sólo si los theres un signo de interrogación ante sí. Dado que la parte del patrón de la captura de la <searchpart> es tan genérico, que puede cambiar que "\?" con un "signo de interrogación o símbolo de libra" y hacer que coger una cadena de consulta y / o un hash.
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?([\?#][^\s]*)?
-
Por suerte, me encontré un sin caracteres de escape de barra diagonal antes de que me envió este. No sé si se puede usar delimitadores alternativos en Ruby, pero si puede usar otra cosa que la tradicional barra diagonal al trabajar con una URL y expresiones regulares, usted debe. Yo normalmente uso el símbolo de libra cuando se trabaja con expresiones regulares, pero desde los theres uno en mi patrón de este tiempo, la enfermedad utilizar una tilde en su lugar.
~https?://[^:/\s]{3,}(:\d{1,5})?(/[^\?\s]*)?([\?#][^\s]*)?~
Strong with this one, the sudo is.