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 06/09/2011, 00h42   #1
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : conception et traitement de documents xhtml
Secteur : Conseil

Informations forums :
Inscription : août 2011
Messages : 107
Points : 59
Points : 59
Par défaut Extraire une chaîne complète contenant un mot particulier

Bonjour,

Pouvez-vous m'aider s'il vous plaît ?

Dans une partie d'une regex je dois extraire une chaîne comprise entre guillemets contenant un mot particulier, par exemple extraire la chaîne "mot1 mot2 schtroumpf mot3" contenant le mot "schtroumpf".

Je ne connais a priori ni la position du mot, ni le nombre et la composition des mots qui l'encadrent.

Ces différentes chaînes doivent donc pouvoir être extraites :
"schtroumpf"
"mot1 schtroumpf"
"schtroumpf mot1 mot2"
"mot1 schtroumpf mot2 mot3"
etc


Pouvez-vous m'indiquer comment je dois libeller ma regex car je n'y arrive pas, malgré mes nombreux essais en tout genre ?

Grand merci d'avance
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 04h13   #2
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
T'as de la chance que j'aime bien les schtroumpf, surtout la Schtroumpfette

Si tu veux pouvoir la trouver en recherchant un schtroumpf, tu peux faire :

Code :
1
2
3
4
5
$recherche = 'schtroumpf';
 
$chaine = '"mot1 mot2 toto schtroumpfette"';
 
if (preg_match('#".*'.$recherche.'.*"#',$chaine,$result)) print_r($result);
si non
Code :
1
2
3
4
5
6
 
$recherche = 'schtroumpf';
 
$chaine = '"mot1 mot2 toto schtroumpfette"';
 
if (preg_match('#".*\b'.$recherche.'\b.*"#',$chaine,$result)) print_r($result);
Tu l'auras compris le "\b" symbolise un séparateur de mot, le point "." n'importe quel caractère, et "*" que le caractère qui précède est facultatif et peut apparaître 0, 1 ou plusieurs fois.

Si tu veux éviter que la regex se goinfre trop car elle est gourmande par défaut, ajoute l'option U derrière le dernier délimiteur '#". Et pour faire bonne mesure tu peux aussi mettre un "i" pour une recherche insensible à la casse, soit :
Code :
if (preg_match('#".*\b'.$recherche.'\b.*"#Ui',$chaine,$result)) print_r($result);
Dans tous les cas, prends soin d'échapper les caractères spéciaux spécifiques aux régex si tu en inclus dans $recherche.

LE site de référence (en français).
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 10h59   #3
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : conception et traitement de documents xhtml
Secteur : Conseil

Informations forums :
Inscription : août 2011
Messages : 107
Points : 59
Points : 59
Merci, merci, merci

J'avais dans mes essais complètement oublié le délimiteur de mot \b.

Je peux donc aussi trouver des expressions comme "schtroumpf dans schtroumpfette" ! (A vous de deviner ce qu'il y fait...)
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h21.


 
 
 
 
Partenaires

Hébergement Web