Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 05/07/2011, 10h46   #1
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Par défaut Recherche d'une sous-chaîne complète dans une chaîne de caractères

Bonjour à tous,
j'aimerais tester si une sous-chaîne complète existe dans une chaîne de caractères.
Je fais
Code :
if (eregi("main",$phrase)){echo $phrase;}
Il m'affiche la phrase qui contient "main" même si c'est dans un mot comme "demain".
Pourtant je voudrais n'avoir que la phrase qui a le mot "main" et qu'il ne m'affiche pas la phrase qui a "main" comme une partie de "demain".
Comment est-ce que je dois faire pour n'avoir que la phrase contenant le mot "main"?
Merci d'avance.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 13h16   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Une regexp dans ce cas est totalement inutile: utilise strpos qui va 400x plus vite

Code :
1
2
3
$str = "une chaine de caracteres";
if (strpos(' ' . $str, ' chaine') !== false)
 ...
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/07/2011, 14h49   #3
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci pour ta réponse Benjamin Delespierre.
Mais ça ne marche toujours pas. Dès qu'il trouve la sous chaîne, il m'affiche la phrase même si la sous-chaîne est une partie d'un mot. Alors que j'aimerais qu'il ne m'affiche la phrase que lorsque le mot (pas la partie d'un mot) est identique à la sous-chaîne recherchée.
Je ne sais pas comment faire pour y arriver
Merci d'avance.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 14h57   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Mets un espace devant le mot recherché comme spécifié dans l'exemple tout simplement.

-- Edit

Comme un idiot j'avais pas vu venir le coup des suffixes.
Qu'a cela ne tienne, voici une solution fonctionnelle:
Code :
1
2
3
4
$str = "Une, chaine: de, caracteres. La suite;";
$pieces = preg_split('~([[:punct:]]|[[:blank:]])~', $str);
if (in_array('chaine', $pieces))
  echo "Trouvé !";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/07/2011, 17h11   #5
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci encore Benjamin Delespierre.
Ça marche parfaitement.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h16   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est a faire avec la limite de mot \b

Code :
1
2
3
$str = "Une, chaine: de, caracteres. La suite;";
if(preg_match('/\bchaine\b/', $str))
echo 'Trouvé !';
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 05/07/2011, 17h50   #7
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci stealth35.
J'ai essayé, ça marche mais lorsque j'utilise une variable à la place de chaine, ça ne marche plus.
Code :
1
2
3
4
for ($r=0;$r<$taille_tab;$r++){
if(preg_match('/\b$nom_tab[$r]\b/', $title)) 
  echo $nom_tab[$r];
}
Comment puis-je faire pour que ça marche avec ta méthode?
Là j'apprendrai encore davantage.

Aussi j'aimerais que la casse ne soit pas respectée, comment dois-je faire?
Merci d'avance.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h52   #8
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci encore Benjamin Delespierre.
Ça marche mais j'aimerais que la casse ne soit pas respectée.
Comment dois-je faire?
Merci d'avance.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h59   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour parcourir un tableau c'est foreach

t'as pas verfié ta chaine, les guillemets simples de lisent pas les variables (c'est l'une des base du PHP)

pour le reste tout est dans la doc
http://www.php.net/manual/fr/referen....modifiers.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2011, 13h08   #10
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci pour le tuto stealth35.
J'ai résolu mon problème de casse grâce à cette fonction:

Code :
1
2
3
4
function in_arrayi($needle, $haystack)
{
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
Elle me permet de rendre in_array() insensible à la casse.

Merci encore Benjamin Delespierre.
missmiss89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 13h10   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Je pense que la solution proposée par stealth est bien meilleure, pour être insensible à la casse il suffit d'ajouter le modificateur i.

Code :
1
2
3
4
$str = "Une, chaine: de, caracteres. La suite;";
$needle = "ChaInE";
if(preg_match("/\b{$needle}\b/i", $str))
echo 'Trouvé !';
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2011, 16h26   #12
Invité régulier
 
Femme
Étudiant
Inscription : juin 2011
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2011
Messages : 37
Points : 6
Points : 6
Merci Benjamin Delespierre.
Ça marche parfaitement.
missmiss89 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 23h28.


 
 
 
 
Partenaires

Hébergement Web