Bonjour.
Mon besoin est d'extraire les URL d'un texte qui ne soient pas contenues dans un BBCODE, donc sont concernées les balises URL(avec ou sans paramètre =) et IMG.
La regex suivante présente deux dysfonctionnements que j'ai du mal à saisir. (elle ne traite que le cas des balises URL, pas les IMG)
Dans la deuxième capture, le but de la recherche est de récupérer un chaîne débutant par un nom de protocole, suivis de :// et un nombre de caractères indéterminé jusqu'à tomber sur un espace ou fin de ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part /(?:(?<!(\[\/url\]|\[\/url=))(\s|^))((https?|ftps?|ircs?|http?|ftp?|irc?):\/\/\S+)(?:(?<![[:punct:]])(\s|\.?$))/igm
1er dysfonctionnement :
Les URL se terminant par / ou un = (cas d'une url se terminant par variable non affectée ; si la variable est affectée d'une valeur, la regexfonctionne ) ne sont pas prises en compte.
Exemple :
http://www.machin.com/
http://www.machin.com/page.php?id=
2e dysfonctionnement :
Seuls les liens dans les balises URL devraient être ignorés.
Il se trouve que celles incluses dans les balises IMG le sont aussi (ce que je cherchais à faire au final, exclure à la fois les balises URL et IMG, mais dans le cas présent, seule la balise URL est indiquée dans le "negative groupbehind".
Pouvez-vous m'expliquer l'erreur ?
D'avance, merci.
Partager