2009-09-02 13 views
1

Disons que je dois obtenir une chaîne dans quelques h1, h2 ou h3 balisesRegex pour trouver chaîne à l'intérieur chaîne à l'intérieur chaîne

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/ 

Cela fonctionne très bien si l'utilisateur décide d'adopter une approche saine pour les en-têtes: Mais connaissant mes utilisateurs, ils veulent gras, italique, souligné h1. Et ils ont ce petit bourbier codé pour les aider à le faire. TinyMCE génèrerait:

<h1><b><span style='text-decoration: underline'><i>My Hideous Header</i></span></b></h1> 

Ma question est:

Comment puis-je obtenir une chaîne dans h2 h1, ou h3, puis à l'intérieur une quantité d'autres balises entourant ainsi?

Merci, Joe

+1

Que pensez-vous de cela? '

Hideous En-tête

' Voulez-vous récupérer la chaîne de titre complète avec ses balises '' intégrées? –

Répondre

1

Si vous êtes en php, vous pouvez utiliser votre regex:

/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/

passent alors le résultat capturé par la fonction strip_tags() pour se débarrasser de toute la folie à l'intérieur.

Si vous n'êtes pas sur php, vous pouvez passer le résultat à travers regexp remplacer qui supprime les balises. Quelque chose comme remplacer /<\/?[^>]+?>/ avec chaîne vide.

3
/<(h[1-3])[^>]*>(?:.*?>)?([^<]+)(?:<.*?)?<\/\1>/i 

Il ne sera pas trop difficile de faire des cas qui rompent ce hideusement, car (comme je suis sûr que les gens vous diront) HTML d'analyse syntaxique est un travail pour un analyseur HTML , pas une regex, mais cela fonctionne pour votre cas et divers similaires.

+0

+1, surtout pour le "ne pas utiliser regex pour ça" commenter –

+0

+1 pour les mêmes raisons que simonn! – TrueWill

-1

Si vous ne souhaitez capturer le texte finalement imbriqué vous pouvez simplement laisser tomber tous les tags dans la balise d'en-tête avec:

/<([hH][1-3]).*>(.*?)<.*\/$1>/ 

Untested, mais je pense que cela devrait fonctionner.

+1

Non. '(. *?)' est autorisé à ne rien correspondre, et grâce à l'avare '. *' 'en avant, c'est exactement ce qu'il fait. –

Questions connexes