j'ai un fichier txt avec en ligne
123456
123
1234
1234567
123.4567
j'aimerais recupérer que les lignes commencant par soit 4 soit 5 chiffres
j'ai un code comme ceci
mais je ne sais pas comment on peut faire([0-9\.]){4}
merci pour votre aide
j'ai un fichier txt avec en ligne
123456
123
1234
1234567
123.4567
j'aimerais recupérer que les lignes commencant par soit 4 soit 5 chiffres
j'ai un code comme ceci
mais je ne sais pas comment on peut faire([0-9\.]){4}
merci pour votre aide
pour lire le contenu du fichier, vous avez cette fonction :
https://secure.php.net/manual/fr/fun...t-contents.php
et ensuite pour trouver les nombres essayez ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $texte = "123456 123 1234 du texte 1234567 123.4567 "; preg_match_all("/^([0-9.]{1,5})$/m", $texte, $resultats);
tester ton code sur http://www.phpliveregex.com mais ca ne marche pas
![]()
Tu n'as pas de ligne avec 5 chiffres
Tu as dit 4 et 5, pas 4 et plus.
Et quand il y en a 6 ?
Essaie ça.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php $texte =" 666666 333 4444 55555 7777777 888.8888 1111.111 22222.2222"; $pattern = "/(?<!\.)\b(\d{4,5}(\.\d+){0,1})\b/m"; preg_match_all($pattern, $texte, $resultats); var_dump($resultats);
Donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 array(3) { [0]=> array(4) { [0]=> string(4) "4444" [1]=> string(5) "55555" [2]=> string(8) "1111.111" [3]=> string(10) "22222.2222" } [1]=> array(4) { [0]=> string(4) "4444" [1]=> string(5) "55555" [2]=> string(8) "1111.111" [3]=> string(10) "22222.2222" } [2]=> array(4) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(4) ".111" [3]=> string(5) ".2222" } }
Alors tu prends 6 mais pas 7 ?
Par ce que tu voulais prendre 1234567.
Comme ça.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part preg_match_all("/^[0-9]{4,5}(?:[^0-9].*)?$/m", $texte, $resultats);
en faisant simplement comme celà
ca donne bienpreg_match_all("/^[0-9]{4,5}/m", $input_lines, $output_array);
ca qui me semble pas mal .c'est ce que je cherche mais j'ai pas bien compris cette instruction .c'est soit 4 ou 5 / ou de 4 à 5 chiffres?array(10=>array(60=>66666 1=>4444 2=>55555 3=>77777 4=>1111 5=>22222))
{4,5}
@bigs3232
Tes spécifications ne sont pas claires.
Or si tu as pris mon exemple, dans le résultat que tu postess'il y a 6 chiffres je ne prends pas
666666 est pris, tout comme 7777777 et ils ont respectivement 6 et 7 chiffres !preg_match_all("/^[0-9]{4,5}/m", $input_lines, $output_array);
ca donne bien
array(10=>array(60=>66666 1=>4444 2=>55555 3=>77777 4=>1111 5=>22222))
Pour ma part, j'avais compris "qui ont 4 ou 5 chiffres".
{4,5} dit matcher au minumum 4 et au maximum 5. Puisque le pattern se comporte avec avidité, si il y a 5, il va matcher 5.
merci badaze .ton code est bien trop compliqué pour moi mais celui à tsuji me semble plus facile à comprendre .ceci dit j'ai pas compris ce code de tsuji.
si tu peux nous apporter un peu de ta lumière(?:[^0-9].*)?
Le sous-pattern : (?:[^0-9].*)?
[1] (?...) signifie les sous-matches de par le pattern dedans (sous-pattern) ne serait pas capturé. La différence peut se voir par exemple via print_r($resultats)
[1.1] sans (Array[1] contient les "submatches")
[1.2] avec (Array[1] se fait disparaître)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Array ( [0] => Array ( [0] => 1234xxxxx [1] => 98765yyyy etc... ) [1] => Array ( [0] => xxxxx [1] => yyyy etc... ) )
[2] [^0-9].*
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Array ( [0] => Array ( [0] => 1234xxxxx [1] => 98765yyyy etc... ) )
[2.1] La première partie [^0-9] se dit tout caratère sauf (une négation) les numériques 0 à 9. Faites attention qu'elle n'est qualifiée par ?. Il faut avoir matché un si c'est réussir. C'est le garant que la ligne commence seulement les numériques 4 à 5 comptes et pas plus et puis après au moins un non-numérique.
[2.2] La deuxième partie .* va matcher tout le reste jusqu'à la fin de la ligne pour l'option m (/m) multi-ligne.
[3] (?...)?
La marque d'interrogation à la fin tient en compte qu'il se peut qu'on trouve immédiatement la fin de ligne ($) sans rien après les 4 ou 5 numériques.
Voilà tout.
Partager