URL Regex

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Novembre 24th, 2010, 1:01 pm

Im essayant d'écrire une expression pour supprimer toutes les URL d'une chaîne, jusqu'ici, je n'ai cette

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


Il répondra à tout dans cette chaîne, mais une url commençant par www . Je serais un plus très simple à la regex mais je n'arrive pas à comprendre.

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


Im en utilisant Ruby si cela fait une grande différence. Mis à l'essai l'expression en utilisant cet outil: http://rubular.com/
#define NULL (::rand() % 2)
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Novembre 24th, 2010, 1:01 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Novembre 24th, 2010, 1:24 pm

Cela fonctionne, mais semble un peu salissante
Code: [ Select ]
(https?:\/\/[.\w]{1,}\/?\S+|w{3}[.\w]{1,}\/?\S+)
, Son fondamentalement l'exécution de deux expressions, l'une pour http et un autre pour le www.
#define NULL (::rand() % 2)
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Novembre 24th, 2010, 9:44 pm

Son certainement plus facile quand vous voulez juste pour localiser et supprimer les URL, plutôt que de l'analyser en morceaux.

Si nous prenons un coup d'oeil ici , Nous pouvons obtenir une syntaxe simplifiée pour une URL HTTP.

Code: [ Select ]
http://<host>:<port>/<path>?<searchpart>


Ill aller de l'avant et de commencer par là pour mon modèle, en étant sûr d'échapper les caractères significatifs pour les expressions régulières.

Code: [ Select ]
http:\/\/<host>:<port>\/<path>\?<searchpart>


Maintenant, je veux prendre HTTPS, si mal ajouter un "zéro ou une fois" s pour le protocole.

Code: [ Select ]
https?:\/\/<host>:<port>\/<path>\?<searchpart>


Du haut de ma tête, je crois <hôte> peut être constitué de caractères alphanumériques, des tirets et points.

Un regard en arrière à ce RFC, thats à son sujet droit. Au moins, il a été jusqu'à récemment, quand internationalisé TLD ont été introduits avec des caractères non-latin.
Heureusement, même avec internationalisé TLD la syntaxe d'une URL suit encore ce modèle original. Donc, afin de tenir compte pour eux, Ill suffit d'utiliser un modèle plus générique pour la <hôte> que je le ferais normalement et assurez-vous tout ce moteur des expressions régulières à l'aide Im peut travailler avec les jeux de caractères multi-octets.

»Autre chose qu'un colon port séparateur AKA, un séparateur de chemin AKA barre oblique, ou un autre type d'espaces, trois fois ou plus" devrait le faire. Son assez générique, mais combiné avec le début et la fin du motif de l'ancrage ne devrait pas y avoir de nombreux faux positifs et tout manque sera commis d'erreur sur le côté de l'enlèvement.

Code: [ Select ]
https?:\/\/[^:\/\s]{3,}:<port>\/<path>\?<searchpart>


Le port est optionnel et sera toujours composé de chiffres. Alors que l'article III envelopper dans un "zéro ou une fois" sous-modèle, et depuis les ports série 1 à 65535 Ill limiter le nombre de chiffres à 1-5.

Code: [ Select ]
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?\/<path>\?<searchpart>


Maintenant, le séparateur de chemin et le chemin sont également en option, mais il n'est pas toujours un chemin quand des theres un séparateur de chemin mais il ya toujours un séparateur de chemin quand des theres un chemin. Alors, que faire, c'est mauvais envelopper à la fois tous les deux dans un modèle «zéro ou une fois" sous, puis depuis un point d'interrogation est ce qui marque la prochaine section d'une URL Ill utiliser un rien «autre que les espaces ou un point d'interrogation zéro fois ou plus »après le séparateur de chemin.

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


Le <searchpart> fonctionne de façon similaire à l'<chemin>.

Code: [ Select ]
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?(\?[^\s]*)?


Maintenant, une chose thats pas inclus dans ce RFC, est une mention de la <hash> (http://domain.tld/path?searchpart #hachage) sans doute parce que le hachage est utilisé par le navigateur et ne jamais envoyée à un serveur. Le <hash> fonctionne de façon similaire à l'<searchpart>, mais l'un d'eux ne peut exister sans l'autre d'être là.

Le modèle tel quel va attraper la <hash> déjà, mais seulement s'il ya encore un point d'interrogation devant elle. Depuis la partie du motif de la capture <searchpart> est tellement générique, je ne peux que swap "\?" avec un "point d'interrogation ou symbole dièse" et le faire prendre un querystring et / ou une table de hachage.

Code: [ Select ]
https?:\/\/[^:\/\s]{3,}(:\d{1,5})?(\/[^\?\s]*)?([\?#][^\s]*)?


-

Heureusement, j'ai attrapé une non-échappé barre oblique avant que j'ai posté ce. Je ne sais pas si vous pouvez utiliser les délimiteurs autre en Ruby, mais si vous pouvez utiliser autre chose que la traditionnelle barre oblique lorsque l'on travaille avec une URL et expressions régulières, vous devriez. J'utilise habituellement le symbole dièse lorsque vous travaillez avec des expressions régulières, mais depuis theres un dans mes habitudes de ce temps, mauvais utiliser un tilde à la place.

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

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 164 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC