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)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
/(?:(?<!(\[\/url\]|\[\/url=))(\s|^))((https?|ftps?|ircs?|http?|ftp?|irc?):\/\/\S+)(?:(?<![[:punct:]])(\s|\.?$))/igm
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.


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.