2009-11-23 9 views
1

Comment puis-je rechercher des liens en HTML et les supprimer?Trouver des liens et les supprimer du HTML

$html = '<p><a href="javascript:doThis('Test Title 1')">Test Title 1</a></p>'; 
$html .= '<p><a href="javascript:doThis('Test Title 2')">Test Title 2</a></p>'; 
$html .= '<p><a href="javascript:doThis('Test Title 3')">Test Title 3</a></p>'; 

$match = '<a href="javascript:doThis('Test Title 2')">'; 

Je souhaite supprimer l'ancre mais afficher le texte. voir ci-dessous.

Test Title 1

Titre Test 2

Test Title 3

Je ne l'ai jamais utilisé les expressions régulières, mais je peux peut-être éviter aussi. Faites-moi savoir si je ne suis pas clair.

Merci

Mark

EDIT: ne est pas une chose côté client. Je ne peux pas utiliser javascript pour cela. J'ai un CMS personnalisé et je veux éditer le HTML stocké dans une base de données.

+7

Si vous utilisez regex pour l'analyse syntaxique HTML bobince vous chasser vers le bas (http://stackoverflow.com/questions/1732348/ regex-match-open-tags-sauf-xhtml-self-contained-tags/1732454 # 1732454) –

+0

wow. Je viens de lire ça la semaine dernière aussi. Whooops haha. – madphp

Répondre

0

Vous pouvez utiliser

var foo = document.getElementsByTagName('a'); 

iront chercher toutes les balises de lien. Pas besoin d'expressions régulières ici ...

EDIT: J'apprends juste à lire ...;) Aller avec les capacités DOM ou XML de PHP. Cela devrait être assez facile à utiliser.

+0

ce n'est pas une chose côté client. J'ai un CMS personnalisé et je veux éditer le HTML stocké dans une base de données. – madphp

+0

Oups, désolé. Vous devriez préférer utiliser PHP DOM ou XML au lieu de RegEx dans ce cas ... – Franz

4

Vous pouvez essayer la chose la plus simple:

echo strip_tags($html, '<p>'); 

Ce bandes tous les tags sauf <p>

Si vous aimez vraiment regexp:

echo preg_replace('=</?a(\s[^>]*)?>=ims', '', $html); 

EDIT:

Supprimer a-tag AND tags environnants (le code devient salissant et doesn « T travailler avec cassé (X) HTML):

echo preg_replace('=<([a-z]+)[^>]*>\s*<a(\s[^>]*)?>(.*?)</a>\s*</\\1>=ims', '$3', $html); 

Howerwer si votre problème est si compliqué que ça, je recommande que vous essayez xpath.

+0

Cela supprimera tous les liens, mais comment puis-je rechercher le lien en utilisant la variable de correspondance. Donc, il va supprimer ce lien et l'étiquette de fermeture qui le précède. – madphp

0

sed -i -e 's/<a.*<\/a>//g' filename.html

Notez que l'utilisation des expressions régulières pour le piratage HTML est une proposition douteuse ..., mais il pourrait il suffit de travailler dans la pratique ;-)

+0

Juste pour vous avertir ... vous serez critiqué pour celui-ci par certains membres de la communauté ... – Franz

+0

Vous êtes sûr que Franz? Je continue à lire c'est correct de l'utiliser, si c'est une petite partie de HTML. – madphp

+0

Oui, je sais. Mais vous pouvez presque toujours trouver un moyen de faire fonctionner votre RegEx ... – Franz

0

ouvrez le fichier HTML dans Microsoft Expression. Ctrl + F, puis a choisi de remplacer ou étiquette des attributs de balise contenu solution facile et rapide Merci Shomaail

+1

pas besoin de fermer votre réponse avec Merci, et votre nom d'utilisateur est déjà De plus, cette question est étiquetée "regex" ce qui signifie que l'utilisateur cherche une expression régulière.Votre réponse est simple et élégante, donc je la considère utile pour les personnes qui cherchent, mais ce n'est pas nécessairement dans les exigences de la question. – deltree

Questions connexes