Pb regex php
Fermé
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
-
12 août 2009 à 17:35
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 - 13 août 2009 à 10:32
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 - 13 août 2009 à 10:32
A voir également:
- Pb regex php
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Bouton php - Forum PHP
- Php?id=1 - Forum PHP
- Regex tabulation ✓ - Forum Programmation
15 réponses
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 17:49
12 août 2009 à 17:49
Salut, tu est sûr du nombre d'espace et tout ? donnes le type de données que tu veux chercher, donnes qques exemples avec lesquels ca doit fonctionner , j'aime bien les regExp moi ;)
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 17:56
12 août 2009 à 17:56
Je cherche a affiner mon moteur de recherche, donc éffectivement l'utilisateur pourra taper la saisie qu'il veut (avec un ou plusieurs espaces)
Désolé, mais je ne vois pas trop quoi rajouter à mon post précédent qui me parait clair :
$search = 'toto est [un idiot]';
Je souhaiterai avoir comme retour (avec preg_match_all)
array(0 => 'toto', 1 => 'est', 2 => [un idiot]);
ou encore....
$search = 'toto [est un] idiot';
array(0 => 'toto', 1 => '[est un]', 2 => 'idiot');
Désolé, mais je ne vois pas trop quoi rajouter à mon post précédent qui me parait clair :
$search = 'toto est [un idiot]';
Je souhaiterai avoir comme retour (avec preg_match_all)
array(0 => 'toto', 1 => 'est', 2 => [un idiot]);
ou encore....
$search = 'toto [est un] idiot';
array(0 => 'toto', 1 => '[est un]', 2 => 'idiot');
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 17:58
12 août 2009 à 17:58
Oh oh oki en gros tu veux chaque mot c'est ca ?
car moi sinon juste comme ca pour ton 1er exemple sinon j'avais fait "<?php
$sSearch = 'toto est [un idiot]';
$sPattern = '#^([^ ]+) ([^ ]+) (.*)$#';
preg_match_all($sPattern, $sSearch, $aMatches);
echo "<pre>".print_r($aMatches, true)."</pre>";
?>"
P.S : a noter que ton expression régulière est mal écrite a la base.
car moi sinon juste comme ca pour ton 1er exemple sinon j'avais fait "<?php
$sSearch = 'toto est [un idiot]';
$sPattern = '#^([^ ]+) ([^ ]+) (.*)$#';
preg_match_all($sPattern, $sSearch, $aMatches);
echo "<pre>".print_r($aMatches, true)."</pre>";
?>"
P.S : a noter que ton expression régulière est mal écrite a la base.
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:02
12 août 2009 à 18:02
non, je veux precisement mon exemple, cad que si un occurence est entre crochet elle doit etre compris comme une seule entrée de mon tableau, meme si elle contient de mot separés par un espace.
Merci pour ton aide
Merci pour ton aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:05
12 août 2009 à 18:05
preg_match_all('#^([^ ]+) ([^ ]+) (.*)$#', $search, $occ)
me renvoi
array(4) {
[0] = array(1) {
[0] = string(22) "toto est [un idiot] sd"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(13) "[un idiot] sd"
}
et ceci preg_match_all('#\[.*\]|^([^ ]+) ([^ ]+) (.*)$#', $search, $occ)
me renvoie
array(4) {
[0] = array(1) {
[0] = string(19) "toto est [un idiot]"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(10) "[un idiot]"
}
}
ce qui est presque bon mais j'aimerai ne pas avoir de tableau a double entrée, inutiles dans mon cas
me renvoi
array(4) {
[0] = array(1) {
[0] = string(22) "toto est [un idiot] sd"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(13) "[un idiot] sd"
}
et ceci preg_match_all('#\[.*\]|^([^ ]+) ([^ ]+) (.*)$#', $search, $occ)
me renvoie
array(4) {
[0] = array(1) {
[0] = string(19) "toto est [un idiot]"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(10) "[un idiot]"
}
}
ce qui est presque bon mais j'aimerai ne pas avoir de tableau a double entrée, inutiles dans mon cas
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 18:07
12 août 2009 à 18:07
Bon après je sais pas si c'est exactement ça car ca prend pas les caractères accentuées, j'ai la flemme de les rajouter :)
<?php
$sSearch = 'toto est [un idiot]';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ ]+)#';
preg_match_all($sPattern, $sSearch, $aMatches);
echo "<pre>".print_r($aMatches, true)."</pre>";
?>
Retourne
Array
(
[0] => Array
(
[0] => toto
[1] => est
[2] => [un idiot]
)
[1] => Array
(
[0] =>
[1] =>
[2] => [un idiot]
)
[2] => Array
(
[0] => toto
[1] => est
[2] =>
)
)
Avec $aMatches[0] qui contient finalement ce que tu voulais...
C'est bon pour toi ?
P.S: du coup ta reg exp est pas toute fausse que je l'ai mis dans le post du dessus, je pensais que tu voulais pas les [ ]... autant pour moi :)
<?php
$sSearch = 'toto est [un idiot]';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ ]+)#';
preg_match_all($sPattern, $sSearch, $aMatches);
echo "<pre>".print_r($aMatches, true)."</pre>";
?>
Retourne
Array
(
[0] => Array
(
[0] => toto
[1] => est
[2] => [un idiot]
)
[1] => Array
(
[0] =>
[1] =>
[2] => [un idiot]
)
[2] => Array
(
[0] => toto
[1] => est
[2] =>
)
)
Avec $aMatches[0] qui contient finalement ce que tu voulais...
C'est bon pour toi ?
P.S: du coup ta reg exp est pas toute fausse que je l'ai mis dans le post du dessus, je pensais que tu voulais pas les [ ]... autant pour moi :)
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:10
12 août 2009 à 18:10
c'est bon pour moi, n'y a t'il pas un moyen pour ne générer qu'un seul tableau ? quant aux caractères accentués ils sont encodés dans ma base donc pas de soucis de ce coté là.
Merci beaucoup pour ton aide utile !
Merci beaucoup pour ton aide utile !
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:14
12 août 2009 à 18:14
tout compte fait mon résultat n'est pas du tout correct :)
avec comme recherche : "toto est [un idiot] f"
j'ai
array(3) {
[0] = array(4) {
[0] = string(4) "toto"
[1] = string(3) "est"
[2] = string(2) "un"
[3] = string(6) "idiot]"
}
[1] = array(4) {
[0] = string(0) ""
[1] = string(0) ""
[2] = string(0) ""
[3] = string(0) ""
}
[2] = array(4) {
[0] = string(4) "toto"
[1] = string(3) "est"
[2] = string(2) "un"
[3] = string(6) "idiot]"
}
il me vire le crochet d'ouverture et ne considere pas [un idiot] comme une seul ligne
avec comme recherche : "toto est [un idiot] f"
j'ai
array(3) {
[0] = array(4) {
[0] = string(4) "toto"
[1] = string(3) "est"
[2] = string(2) "un"
[3] = string(6) "idiot]"
}
[1] = array(4) {
[0] = string(0) ""
[1] = string(0) ""
[2] = string(0) ""
[3] = string(0) ""
}
[2] = array(4) {
[0] = string(4) "toto"
[1] = string(3) "est"
[2] = string(2) "un"
[3] = string(6) "idiot]"
}
il me vire le crochet d'ouverture et ne considere pas [un idiot] comme une seul ligne
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:14
12 août 2009 à 18:14
il ne prend pas non plus en compte le "f" qui precede le crochet
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 18:19
12 août 2009 à 18:19
Petite modification :
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
la ca prend le f :)
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
la ca prend le f :)
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 18:16
12 août 2009 à 18:16
Non tu ne peux pas avoir qu'un seul tableau
"Si order est omis, PREG_PATTERN_ORDER est utilisé par défaut."
Et avec PREG_PATTERN_ORDER : L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui satisfont le masque complet, $matches[1] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante, etc.
source : http://fr3.php.net/manual/fr/function.preg-match-all.php
voilà ;)
Pas de soucis, bonne continuation !
"Si order est omis, PREG_PATTERN_ORDER est utilisé par défaut."
Et avec PREG_PATTERN_ORDER : L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui satisfont le masque complet, $matches[1] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante, etc.
source : http://fr3.php.net/manual/fr/function.preg-match-all.php
voilà ;)
Pas de soucis, bonne continuation !
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:22
12 août 2009 à 18:22
J'ai du me tromper dans mon post précedent, la recherche et soumis par le biais d un script ajax et le chargement ne devais pas etre fini.
resultat de toto est [un idiot] de
array(4) {
[0] = array(1) {
[0] = string(22) "toto est [un idiot] de"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(13) "[un idiot] de"
}
}
donc c presque bon mais l'occurence suivant la ] n'est pas trouvée
resultat de toto est [un idiot] de
array(4) {
[0] = array(1) {
[0] = string(22) "toto est [un idiot] de"
}
[1] = array(1) {
[0] = string(4) "toto"
}
[2] = array(1) {
[0] = string(3) "est"
}
[3] = array(1) {
[0] = string(13) "[un idiot] de"
}
}
donc c presque bon mais l'occurence suivant la ] n'est pas trouvée
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:24
12 août 2009 à 18:24
tu as mis :
P.S: du coup ta reg exp est pas toute fausse que je l'ai mis dans le post du dessus, je pensais que tu
voulais pas les [ ]... autant pour moi :)
si je peux avoir array(..., 2 => 'un idiot' au lieu de '[un idiot]' c encore mieux ^^
P.S: du coup ta reg exp est pas toute fausse que je l'ai mis dans le post du dessus, je pensais que tu
voulais pas les [ ]... autant pour moi :)
si je peux avoir array(..., 2 => 'un idiot' au lieu de '[un idiot]' c encore mieux ^^
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
12 août 2009 à 18:25
12 août 2009 à 18:25
moi ca passe pour
<?php
$sSearch = 'toto est [un idiot] de ';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
preg_match_all($sPattern, $sSearch, $aMatches, PREG_PATTERN_ORDER );
echo "<pre>".print_r($aMatches, true)."</pre>";
?>
Array(
[0] => Array
(
[0] => toto
[1] => est
[2] => [un idiot]
[3] => de
)
...
)
<?php
$sSearch = 'toto est [un idiot] de ';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
preg_match_all($sPattern, $sSearch, $aMatches, PREG_PATTERN_ORDER );
echo "<pre>".print_r($aMatches, true)."</pre>";
?>
Array(
[0] => Array
(
[0] => toto
[1] => est
[2] => [un idiot]
[3] => de
)
...
)
mouf13
Messages postés
142
Date d'inscription
mardi 20 juin 2006
Statut
Membre
Dernière intervention
22 février 2011
17
12 août 2009 à 18:32
12 août 2009 à 18:32
bizarre vous avez dit bizarre ?
$sSearch = 'toto est [un idiot] de ';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
preg_match_all($sPattern, $sSearch, $aMatches, PREG_PATTERN_ORDER );
echo "<pre>".print_r($aMatches, true)."</pre>";
->
Array
(
[0] => Array
(
[0] => toto
[1] => est
[2] => un
[3] => idiot]
[4] => de
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
)
[2] => Array
(
[0] => toto
[1] => est
[2] => un
[3] => idiot]
[4] => de
)
)
bon je crois que j'ai trop la tete dedans, ca fait 2 jours que je suis bloqué sur cette @#@# de regex, je vais aller m'aerer avant de jeter l'ordi par la fenetre :)
merci encore pour ton aide
$sSearch = 'toto est [un idiot] de ';
$sPattern = '#(\^\+\])|([a-zA-Z0-9][^ $]*)#';
preg_match_all($sPattern, $sSearch, $aMatches, PREG_PATTERN_ORDER );
echo "<pre>".print_r($aMatches, true)."</pre>";
->
Array
(
[0] => Array
(
[0] => toto
[1] => est
[2] => un
[3] => idiot]
[4] => de
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
)
[2] => Array
(
[0] => toto
[1] => est
[2] => un
[3] => idiot]
[4] => de
)
)
bon je crois que j'ai trop la tete dedans, ca fait 2 jours que je suis bloqué sur cette @#@# de regex, je vais aller m'aerer avant de jeter l'ordi par la fenetre :)
merci encore pour ton aide
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
13 août 2009 à 10:32
13 août 2009 à 10:32
Hello, normal j'avais pas vu mais le serveur a mal interprété mon code !
Arfff j'arrive pas a t'envoyer la bonne version, si tu veux donnes ton mail et je te le mail !
Arfff j'arrive pas a t'envoyer la bonne version, si tu veux donnes ton mail et je te le mail !