Preg_split et expression régulière
Résolu/Fermé
Southstyle
Messages postés
46
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
26 mars 2021
-
3 avril 2017 à 17:35
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021 - 8 avril 2017 à 11:42
Southstyle Messages postés 46 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 26 mars 2021 - 8 avril 2017 à 11:42
A voir également:
- Preg_split et expression régulière
- Expression de recherche - Guide
- Quel fichier contient l’expression trouverpix ? - Forum Programmation
- Expected expression ✓ - Forum C
- Expression encoder - Télécharger - Divers Utilitaires
- Avoir du ping expression ✓ - Forum jeux en ligne
3 réponses
Utilisateur anonyme
Modifié le 3 avril 2017 à 18:15
Modifié le 3 avril 2017 à 18:15
Normalement ceci fait l'affaire:
\s permet de sélectionner tous les caractères vide, donc les espaces, après (et|\/|\+|&) capture soit et, /, + ou &.
Sinon avec ce pattern:
$pattern = '/\s(et|\/|\+|&)\s/'; $var = preg_split($pattern, $personnes, -1, PREG_SPLIT_NO_EMPTY);
\s permet de sélectionner tous les caractères vide, donc les espaces, après (et|\/|\+|&) capture soit et, /, + ou &.
Sinon avec ce pattern:
'/\s+et\s+|\s*[\/|\+|&]\s*/'il faut obligatoirement un espace avant et après le et mais c'est pas obligatoire autours des autres, et de plus ça va supprimé les espaces en trop.
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 098
Modifié le 3 avril 2017 à 18:15
Modifié le 3 avril 2017 à 18:15
Salut Southstyle,
va matcher les lignes avec "et" et deux espaces de part et d'autre
ou
les lignes avec les symboles / + ou &, avec ou sans espaces de part et d'autre
Dal
$var = preg_split("/\\set\\s|\\s*[\\/+&]+\\s*/", "Nom1 Prénom1 +Nom2 Prénom2");
va matcher les lignes avec "et" et deux espaces de part et d'autre
ou
les lignes avec les symboles / + ou &, avec ou sans espaces de part et d'autre
Dal
Southstyle
Messages postés
46
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
26 mars 2021
8 avril 2017 à 11:42
8 avril 2017 à 11:42
Alors c'est parfait comme ça !!
J'obtiens ce que je veux, peu importe le séparateur.
Pour les détails de la discussion quant à échapper ou non les caractères spéciaux ou trimer ou non, je vous laisse décider :-)
En tout cas tel quel ça fonctionne et c'est génial.
Merci @ZeNairolf et @[Dal] pour votre précieuse aide.
Salutations !
$pattern = '/\s(et|\/|\+|&)\s/';
$var = preg_split($pattern, $personnes, -1, PREG_SPLIT_NO_EMPTY);
J'obtiens ce que je veux, peu importe le séparateur.
Pour les détails de la discussion quant à échapper ou non les caractères spéciaux ou trimer ou non, je vous laisse décider :-)
En tout cas tel quel ça fonctionne et c'est génial.
Merci @ZeNairolf et @[Dal] pour votre précieuse aide.
Salutations !
3 avril 2017 à 18:18
3 avril 2017 à 21:28
4 avril 2017 à 12:07
sur les espaces avant et après la variable , tu as aussi raison : faire un trim en plus serait nécessaire si on choisit d'utiliser preg_split, car il ne donne de contrôle que sur les séparateurs
en revanche, en utilisant preg_match, on peut ne capturer que ce qui est souhaité, par exemple, avec un pattern comme celui-là : et on s'économise des trim à gauche et à droite en obtenant directement les données en positions de capture 1 et 3.
autre remarque, sauf erreur, dans la classe définie entre les crochets, il n'est pas nécessaire d'échapper les caractères spéciaux ( , , , etc.) car ils sont compris littéralement. Là j'ai seulement échappé car c'est le délimiteur de la regexp.
Dal