URL Regex

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Noviembre 24th, 2010, 1:01 pm

Estoy tratando de escribir una expresión para eliminar todas las direcciones URL de una cadena, hasta ahora tengo este

Código: [ Select ]
(https?:\/\/[.\w]{1,}\/?\S+)


Que coincidirá con todo en esta cadena, pero comenzando con una url www . Debo ser una adición muy simple de la expresión regular, pero me parece que no puede entenderlo.

Código: [ Select ]
asd sadgf fdgd http://google.com/asd.php?asdasd jdjd http://bit.ly/AdsWG asjjg www.blah.com/gfds http://google.com/


Estoy utilizando Ruby si eso hace una gran diferencia. Estado probando la expresión que utiliza esta herramienta: http://rubular.com/
#define NULL (::rand() % 2)
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Noviembre 24th, 2010, 1:01 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de Usuario
  • Registrado: May 22, 2004
  • Mensajes: 3415
  • Loc: Richland, WA
  • Status: Offline

Nota Noviembre 24th, 2010, 1:24 pm

Esto funciona, pero parece un poco desordenado
Código: [ Select ]
(https?:\/\/[.\w]{1,}\/?\S+|w{3}[.\w]{1,}\/?\S+)
, Su funcionamiento, básicamente, dos expresiones, una por http y otro para el www.
#define NULL (::rand() % 2)
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Noviembre 24th, 2010, 9:44 pm

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.

Código: [ Select ]
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.

Código: [ Select ]
http:\/\/<host>:<port>\/<path>\?<searchpart>


Ahora quiero coger HTTPS, tan mal agregar un cero o una vez "s con el protocolo.

Código: [ Select ]
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.

Código: [ Select ]
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.

Código: [ Select ]
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.

Código: [ Select ]
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?\?<searchpart>


El <searchpart> funciona de manera similar a la <ruta>.

Código: [ Select ]
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.

Código: [ Select ]
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.

Código: [ Select ]
~https?://[^:/\s]{3,}(:\d{1,5})?(/[^\?\s]*)?([\?#][^\s]*)?~
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 102 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC