Page 1 sur 1
regular expr
Posté : 19 mai 2010, 16:35
par gui
bonjour
en mettant cette expre
preg_match('/.+\s (\S+)/', $ligne, $matches);
$score=$matches[1];
>A_1 7.900 790 pos. 162 - 171 1DVP:A
En travaillant sur cette ligne j'aimerai recupérer 7.900 (le premier chiffre apres l'espace)
Mais lui me renvoie 171 le chiffre avant le dernier espace
Re: regular expr
Posté : 19 mai 2010, 16:47
par stealth35
essaye comme ca :
^(?:.(?<!\s))+\s([\d\.]+)
Re: regular expr
Posté : 19 mai 2010, 16:53
par gui
C'est un peu violent, y'a pas plus simple pour récupérer se qu'il ya entre le premier et le deuxieme espace??
ps: ca ne marche pas sur mon script dsl
Re: regular expr
Posté : 19 mai 2010, 16:57
par stealth35
C'est un peu violent, y'a pas plus simple pour récupérer se qu'il ya entre le premier et le deuxieme espace??
ps: ca ne marche pas sur mon script dsl
c'est exactement ce que fais le regexp
qu'est ce que ta mis dans ton code ? ta bien mis les délimiteur ? la chaine est vraiment comme ca ou y'a d'autre chose avant après ?
EDIT : voir pour prendre tout entre le 1er et le 2eme espaces ca serait : ^(?:.(?<!\s))+\s((?:.(?<!\s))+)\s
Re: regular expr
Posté : 19 mai 2010, 17:02
par gui
Pour les délimiteur, ceux ci sont bien en place
pour répondre à ton autre question oui la chaine peut être differente surtout au debut, il peut y avoir nimporte quel caractère avant le premier espace, l'élément de distinction c'est le premier espace:654654651
>B_1 7.500 750 pos. 136 - 145 1D8E:B
>BAB78:C_4 3.200 320 pos. 346 - 355 1
ect
Je dois capture ce qu'il y'a entre les 2 espace 1 et 2
merci pour tes réponses
je teste merci
Re: regular expr
Posté : 19 mai 2010, 17:05
par stealth35
cheez moi ca marche
$str1 = '>B_1 7.500 750 pos. 136 - 145 1D8E:B';
$str2 = '>BAB78:C_4 3.200 320 pos. 346 - 355 1';
preg_match('/^(?:.(?<!\s))+\s((?:.(?<!\s))+)\s/', $str1, $matches1);
preg_match('/^(?:.(?<!\s))+\s((?:.(?<!\s))+)\s/', $str2, $matches2);
var_dump($matches1, $matches2);
Code : Tout sélectionner
array(2) {
[0]=>
string(11) ">B_1 7.500 "
[1]=>
string(5) "7.500"
}
array(2) {
[0]=>
string(17) ">BAB78:C_4 3.200 "
[1]=>
string(5) "3.200"
}
sinon tu fais un
explode, qui serait plus simple et optimisé
Re: regular expr
Posté : 19 mai 2010, 17:10
par gui
jsuis dégouté ca marche pas
preg_match('/^(?:.(?<!\s))+\s((?:.(?<!\s))+)\s/', $ligne, $matches);
$score=$matches[1];
Il me renvoie une erreur, peutêtre due au delimiteur pourtant ceux ci me semble bon..
Re: regular expr
Posté : 19 mai 2010, 17:12
par stealth35
quelle erreur ?

Re: regular expr
Posté : 19 mai 2010, 17:17
par gui
erreur du type "Undefined offset:"
Mais t'as peut être raison ce serai mieu d'utiliser explode, merci pour ton aide si tu as la solution à cette erreur je suis pret à l'entendre mais te prend pas la tête jvai vite régler ca avec explode
Re: regular expr
Posté : 19 mai 2010, 17:20
par stealth35
erreur du type "Undefined offset:"
Mais t'as peut être raison ce serai mieu d'utiliser explode, merci pour ton aide si tu as la solution à cette erreur je suis pret à l'entendre mais te prend pas la tête jvai vite régler ca avec explode
ca viens peu etre de la version de pcre, fais un
echo PCRE_VERSION;
Re: regular expr
Posté : 19 mai 2010, 17:24
par gui
7.9 2009-04-11
Voilà ce qu'il me renvoie
Avec explode ca fonctionne, au passage su qq veux savoir comment
$space=explode(" ",$ligne);
$score=$space[1];
Merci pour tout t un boss des expre, encore merci
Re: regular expr
Posté : 19 mai 2010, 17:27
par stealth35
7.9 2009-04-11
Voilà ce qu'il me renvoie
c'est pas vieux pourtant, on dirais qui prend pas en compte les balise non-capturante, si tu fais juste comme ca :
^(.(?<!\s))+\s((.(?<!\s))+)\s
Re: regular expr
Posté : 19 mai 2010, 17:37
par gui
je teste
Toujours une erreur:
Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in /opt/lampp/htdocs/profils/score.class.php on line 43
voici ce que j'ai mis
preg_match('^(?:.(?<!\s))+\s((?:.(?<!\s))+)\s', $ligne, $matches);
$score=$matches[1];
Mais pas de probleme je fais avec avec explode ca marche très bien.
Merci pour tout encore une fois stealth35