2010-03-16 11 views
0

Ce regex vient de Atwood et est utilisé pour filtrer les balises d'ancrage avec autre chose que le href et un titre:Comment puis-je corriger cette regex pour autoriser une chaîne spécifique?

<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")?\s?> 

J'ai besoin pour permettre h attribut supplémentaire qui correspond spécifiquement: target = « _ blank ». Donc l'adresse suivante devrait être autorisé:

<a href="http://www.google.com" target="_blank"> 

J'ai essayé de changer le modèle de ceux-ci:

<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget="_blank")?\s?> 
<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget=\"_blank\")?\s?> 

Il est clair que je ne sais pas très bien regex. Comment le modèle devrait-il être ajusté pour permettre la cible vide et aucune autre cible?

+0

Vous ne devriez pas utiliser regex pour analyser HTML: http://stackoverflow.com/questions/1732348/regex-match -open-tags-except-xhtml-self-contained-tags/1732454 # 1732454 –

+0

Pourquoi c'est certainement une réponse intéressante, il semble un peu idiot de le prendre littéralement et dans tous les cas. Ce que je l'utilise pour est une routine simple d'aseptisation destinée uniquement à assurer quelques balises de base sont autorisés. Regex semble certainement à la hauteur de cette tâche même si je ne le suis pas. ;) –

Répondre

1
<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"\s(target=\"_blank\")> 

Faites ce que vous demandez.

Si vous êtes un nœud regex, laissez-moi vous recommander RegExBuddy. C'est un programme qui vous permet de tester votre regex sur des échantillons de texte ou des exemples de fichiers.

Économise beaucoup de temps.

http://www.regular-expressions.info/regexbuddy.html (Regex amis)

http://www.regular-expressions.info est également une bonne ressource

+0

Notez que cette solution impose que les attributs (href, target et title) aient un ordre spécifique. – Felix

+0

J'utilisais cette URL pour tester mais je n'avais pas trouvé de modèle qui marchait. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –

+0

cela a fonctionné avec l'exemple que j'avais ... merci. –

1
<a\shref="(\#\d+|(https?|ftp)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+)"(\stitle="[^"]+")(\starget="_blank")>