par
Ryle » 19 oct. 2008, 14:40
Alors déjà une solution simple, sans utiliser les expressions régulières, tu peux à l'aide de la fonction strpos() connaitre la position d'un caractère dans une chaine. En utilisant la fonction substr() tu peux dès lors couper ta chaine en allant de 0 à la position du caractères µ, puis du caractères @ jusqu'à la fin de ta chaine. Il te suffit ensuite de concaténer les deux pour obtenir ce que tu souhaites
Ca c'était pour la partie facile, sans prise de tête, maintenant on va voir ton expression régulière : "#^µ[a-z]@$#"
Alors déjà, ^ et $ désignent respectivement le début et la fin de ta chaine. En gros si ton masque est "^a" cela veut dire que tu cherches un "a" en tout début de chaine et pas ceux qui pourraient se trouver plus loin. Hors dans ton cas, ta chaine ne commence pas nécessairement par "µ" et ne se termine pas non plus forcément par "@". Tu cherches ce modèle peut importe l'endroit où il se trouve dans ta chaine. Donc on vire
Deuxième point, [a-z], correspond n'importe quelle lettre comprise entre "a" et "z". Mais si ta chaine contient un espace, il n'est pas pris en compte ici. Pas plus s'il contient une lettre majuscule, un chiffre, un trait d'union ou de la ponctuation... Donc option a, tu listes l'ensemble des caractères autorisés [a-zA-Z0-9,-....] ou option b, tu te moque de savoir ce qu'il y a entre µ et @ et tu veux juste que ça dégage. Tu peux alors utiliser le point "." qui désigne n'importe quel caractère (majuscule, minuscule, numérique, ponctuation, ...)
Troisième point, que tu écrives "[a-z]" ou ".", cela représente un caractère et un seul. Donc dès qu'il y en a plus d'un, ton expression ne correspond plus. Il faut donc préciser le nombre d'occurence, ex : [a-z]{2} pour 2 lettres minuscules. [a-z]{1,3} pour une à 3 lettres, etc. Maintenant on peut aussi utiliser les symboles ? + et * pour indiquer "0 ou 1", "1 ou n" et "0 ou n" (qui est ce qui va nous interesser dans ce cas ci, à savoir qu'il y ait un caractère ou 200, on dégage tout ce qu'il y a entre)
Ton expression devrait donc ressembler à : $a_remplacer="#µ.*@";
Essaye déjà comme ça, et on ira voir ensuite du côté des options et de preg_match_all pour que le résultat corresponde bien à ce que tu attends

Alors déjà une solution simple, sans utiliser les expressions régulières, tu peux à l'aide de la fonction strpos() connaitre la position d'un caractère dans une chaine. En utilisant la fonction substr() tu peux dès lors couper ta chaine en allant de 0 à la position du caractères µ, puis du caractères @ jusqu'à la fin de ta chaine. Il te suffit ensuite de concaténer les deux pour obtenir ce que tu souhaites :)
Ca c'était pour la partie facile, sans prise de tête, maintenant on va voir ton expression régulière : "#^µ[a-z]@$#" :)
Alors déjà, ^ et $ désignent respectivement le début et la fin de ta chaine. En gros si ton masque est "^a" cela veut dire que tu cherches un "a" en tout début de chaine et pas ceux qui pourraient se trouver plus loin. Hors dans ton cas, ta chaine ne commence pas nécessairement par "µ" et ne se termine pas non plus forcément par "@". Tu cherches ce modèle peut importe l'endroit où il se trouve dans ta chaine. Donc on vire :)
Deuxième point, [a-z], correspond n'importe quelle lettre comprise entre "a" et "z". Mais si ta chaine contient un espace, il n'est pas pris en compte ici. Pas plus s'il contient une lettre majuscule, un chiffre, un trait d'union ou de la ponctuation... Donc option a, tu listes l'ensemble des caractères autorisés [a-zA-Z0-9,-....] ou option b, tu te moque de savoir ce qu'il y a entre µ et @ et tu veux juste que ça dégage. Tu peux alors utiliser le point "." qui désigne n'importe quel caractère (majuscule, minuscule, numérique, ponctuation, ...)
Troisième point, que tu écrives "[a-z]" ou ".", cela représente un caractère et un seul. Donc dès qu'il y en a plus d'un, ton expression ne correspond plus. Il faut donc préciser le nombre d'occurence, ex : [a-z]{2} pour 2 lettres minuscules. [a-z]{1,3} pour une à 3 lettres, etc. Maintenant on peut aussi utiliser les symboles ? + et * pour indiquer "0 ou 1", "1 ou n" et "0 ou n" (qui est ce qui va nous interesser dans ce cas ci, à savoir qu'il y ait un caractère ou 200, on dégage tout ce qu'il y a entre)
Ton expression devrait donc ressembler à : $a_remplacer="#µ.*@";
Essaye déjà comme ça, et on ira voir ensuite du côté des options et de preg_match_all pour que le résultat corresponde bien à ce que tu attends ;)