Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2008, 16h06   #1
Membre régulier
 
Inscription : septembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : septembre 2006
Messages : 146
Points : 87
Points : 87
Par défaut Isoler le nom d'une balise

Bonjour,

Je cherche extraire le nom d'une balise avec des Regex, mais voilà, je débute en regex et c'est pas encore totalement limpide.

Par exemple :
<p> => p
<div class="maclasse"> => div
<a href="..." alt="..."> => a

J'ai lu plusieurs tutoriaux sur les regex et j'ai un petit début :

Ça ça devrait me prendre le nom de toutes les balises sans paramètres, mais il ignore mes "<" ">".

Et après il faut encore spécifier de s'arrêter au premier espace.

J'ai essayé toutes sortes de variantes mais rien n'y fait, help plz
__________________
Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...
Bloodscalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 16h14   #2
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Bonjour,

Tu as un bon début.

Pour éviter d'avoir une liste de caractères trop important dans ton [], tu peux utiliser les modificateurs pàour rendre ta regex insensible à la casse

Code :
1
2
 
$regex = '¤<([a-z>]+)>¤i';
J'utilise ¤ comme délimiteur car c'est un caractère que l'on ne rencontre pas souvent

Ton expression fonctionne pour toutes les balises sans attributs.

Pour une balise avec attribut ( <a href= ), il faut que tu prennes tous les caractères alphabétique, ce que tu as fait.
Mais quand il va rencontre un espace il va s'arrêter, comme ce cas n'est pas prévu, ton pattern ne match pas.

Pour cela il faut spécifier qu'après la sélection tu acceptes n'importe quel caractère sauf '>' qui ferme la balise

Code :
1
2
 
$regex = '¤<([a-z>]+)[^>]*>¤i';
Une version plus courte fonctionne mais est moins "démonstrative"
Code :
1
2
 
$regex = '¤<([a-z>]+)¤i';
Ces expressions sont bien évidemment destinés à preg_*
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 16h44   #3
Membre régulier
 
Inscription : septembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : septembre 2006
Messages : 146
Points : 87
Points : 87
Alors si j'ai bien compris, c'est le i de fin qui indique qu'il faut être insensible à la casse : |blaBlA|i

Avec ce que t'a mis :
Code :
$regex = '¤<([a-z>]+)[^>]*>¤i';
[a-z>] : caractères a-z ainsi que la fermeture de la balise '>'
=> mais avec ça si je veut récupérer le nom de la balise il vas mettre un '>' avec non ? ce n'est pas le but...

Ce qui me donne :
Qui semble plutôt bien fonctionner

Merci beaucoup
__________________
Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...
Bloodscalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 17h08   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
[/quote]
Citation:
Envoyé par Bloodscalp Voir le message
Alors si j'ai bien compris, c'est le i de fin qui indique qu'il faut être insensible à la casse : |blaBlA|i
oui
Citation:
Envoyé par Bloodscalp Voir le message
Avec ce que t'a mis :
Code :
$regex = '¤<([a-z>]+)[^>]*>¤i';
[a-z>] : caractères a-z ainsi que la fermeture de la balise '>'
Faute de frappe
Citation:
Envoyé par Bloodscalp Voir le message
=> mais avec ça si je veut récupérer le nom de la balise il vas mettre un '>' avec non ? ce n'est pas le but...

Ce qui me donne :
Qui semble plutôt bien fonctionner
En effet c'est ce qu'il fallait faire
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h26.


 
 
 
 
Partenaires

Hébergement Web