Bonjour tout le monde,

N'ayant pas trouvé de librairie sympa pour faire du BBCode, et n'ayant pas la possibilité d'installer l'extension BBCode de php sur mon serveur de prod, j'ai décidé de refaire une classe BBCode pour encoder/décoder une string.

Je me retrouve confronté à un problème pour la regex des liens (et des images mais le problème est le même):

Voici ma regex actuelle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
'#<a[^\>]*?href=("|\')([^\1]*?)\1[^\>]*?>(.*?)</a>#is'
remplacé par:
(sans l'espace - $1$2$1 pour garder les mêmes quotes que celles d'origines)

Donc en gros:
1] <a : ouverture de tag
2] [^\>]*? : nimporte quoi qui ne cloture pas le tag, en quantifier paresseux
3] href=
4] ("|\') : une simple ou une double quote
5] ([^\1]*?) : tout ce qui n'est pas une quote (la même que 4])
6] \1: une simple ou une double quote, mais obligatoirement la même que 4]
7] [^\>]*? : nimporte quoi qui ne cloture pas le tag
8] > : fin de l'ouverture du tag
8] (.*?) nimporte quoi (en quantifieur parresseux)
9] </a> : pour finir, la cloture du tag:

Mon problème est au niveau du 5:
1) Comment faire pour autoriser une quote s'il elle est escapée, sauf évidement si le backslash est lui même éscapée (de façon récursive, pour par exemple, 15 backslash d'affilé) ?
2) Également, par curiosité, y'a-t-il une différence, dans mon cas, si j'utilise ([^\1]*?) (tout ce qui n'est pas une quote) ou (.*?) (quantifieur paresseux) à la place du 5] ?

Voila
En gros mon soucis est de pouvoir récupérer des liens du genre:


<a href="http://site.com/\"quotehere.html">Hey!</a> => "http://site.com/\"quotehere.html"

<a href="http://site.com/\\"quotehere.html">Hey!</a> => "http://site.com/\\"

Et même:
<a href="http://site.com/\\\\\\\\\\\\\\\\\"quotehere.html">Hey!</a> => "http://site.com/\\\\\\\\\\\\\\\\\"quotehere.html"


Merci beaucoup