Bonjour à tous,
Je souhaite faire une regex qui remplace tout ce qui n'est pas dans un intervalle de 0 à 99.
J'ai essayé ça mais ça ne fonctionne pas :
Pouvez-vous me dire ce qui cloche ?Code:preg_replace("#^([0-9][0-9])#", '', $str)
Merci.
Version imprimable
Bonjour à tous,
Je souhaite faire une regex qui remplace tout ce qui n'est pas dans un intervalle de 0 à 99.
J'ai essayé ça mais ça ne fonctionne pas :
Pouvez-vous me dire ce qui cloche ?Code:preg_replace("#^([0-9][0-9])#", '', $str)
Merci.
Le ^ en début de regex qui demande de ne faire la recherche que sur le début de la chaine
Merci pour ta réponse Bovino.
J'ai testé sans le ^ et le résultat est le même, la chaîne ne change pas.
J'ai des chaînes du type xxx xx xxxx xx-yy où y est le chiffre ou nombre entre 0 et 99.
Si j'ai bien compris ce que tu souhaites, essaies ceci :
Code:
1
2
3 $str = "145 13 4567 78-56"; $str = preg_replace("#([0-9]{3,})#", '', $str); echo $str;
Merci Fabien.
En fait la seule chose qui ne change pas dans mes chaînes ce sont les derniers caractères qui peuvent être de la forme -y ou -yy où les y sont toujours des chiffres. Le tiret est également toujours présent.
Avant ce sont des phrases, donc des lettres et des espaces.
Par exemple :
Pierre est gentil-1
Paul regarde par la fenêtre-23
Bonjour,
il vaut mieux procéder autrement : il est plus simple d'extraire le dernier ou les deux derniers chiffres de ta chaîne :
Code:
1
2
3
4
5 $a = 'Paul regarde par la fenêtre-23'; preg_match('/\d{1,2}$/', $a, $matches); if ( ! empty($matches)) { $n = $matches[0]; // $n = 23 }
En fait ça semble fonctionner comme ça tout simplement :
De cette manière je ne conserve que les chiffres de la chaîne.Code:preg_replace("#[\D]#", '', $str)
Tout dépend de ce que tu vises.
Si tu veux être aboslument sûr et certain de ne conserver que le dernier ou les deux derniers chiffres, ton pattern n'est pas bon dans la mesure où si ta chaîne contient d'autres chiffres en plein milieu tu vas aussi les récupérer...
A toi de voir si tu sauras retomber sur tes pattes.
Tu peux enfin faire autrement sans utiliser les regex :
Code:
1
2
3
4
5 $a = 'Paul regarde par la fenêtre-23'; $n = abs(substr($a, -2)); // $n = 23 $a = 'Paul regarde par la fenêtre-3'; $n = abs(substr($a, -2)); // $n = 3
@rawsrc : ben justement, \D est "équivalent" à ^\d à priori :koi:
En effet, je suis certain que mes chaînes ne contiendront que des lettres et espaces (avant le tiret et le(s) chiffre(s)).
En tout cas merci pour votre aide ! :ccool: