J'ai une chaîne, et je voudrais trouver tous les caractères supérieurs qui sont ne faisant pas partie de une balise HTML.Stumped sur Regex avec assertion lookbehind positive de largeur nulle
En ignorant CDATA, etc., cela devrait être facile: trouvez un caractère ">" qui n'a pas de "<" avant ou un autre ">" entre eux.
est ici la première tentative de solution, je suis venu avec:
(?<=(^|>)[^<]*)>
Je pense cela devrait chercher tout « > » où il n'y a pas de caractères « < » à gauche de celui-ci, soit de retour à le début de la chaîne, ou retour au ">" précédent.
J'ai essayé le phrasé négativement ainsi:
(?<!<[^>]*)>
à savoir, un « > » qui est ni précédé d'un « < », à moins que n'est suivi par des non - caractères « > ».
Je pense que je suis juste tordu dans ma tête à propos de la façon dont fonctionnent les lookbehinds.
Tests unitaires:
No match in: <foo>
No match in: <foo bar>
Match in: <foo> bar>
Match in: foo> bar
Match in: >foo
Two matches in: foo>>
Two matches in: <foo> >bar>
Cas d'utilisation: Je suis d'épuration HTML à partir d'un champ de formulaire type wiki que accepte certaines balises HTML, mais les utilisateurs ne sont pas terriblement HTML avertis et parfois entrer non échappés " > "et" < "littéraux pour des significations réelles inférieures et supérieures. Mon intention est de les remplacer par des entités HTML, mais seulement si elles ne font pas partie d'une balise HTML. Je sais qu'il y a la possibilité qu'ils entrent dans un texte comme "Heigh is < 10 and> 5", ce qui briserait cela, mais c'est un cas limite avec lequel je peux travailler ou vivre.
'(? ] *)>' –
Désolé, Brad ne fonctionne pas. – richardtallent
Ça vaut le coup de toute façon. –