Preg_split et expression régulière
Résolu
Southstyle
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
Southstyle Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
Southstyle Messages postés 46 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Quelle est la ligne à écrire pour diviser une chaine selon plusieurs critères ?
Mes critères sont les suivants : il faut retrouver les noms et prénoms d'une personne par rapport à une autre. Ces deux personnes peuvent être séparée par et, +, & ou parfois /
Exemples :
$personnes = Nom1 Prénom1 et Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 / Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 + Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 & Nom2 Prénom2
Dans tous les cas, je dois retrouver
$var[0] = Nom1 Prénom1
$var[1] = Nom2 Prénom2
Quel est le pattern à écrire ??
Merci pour votre précieuse aide !
Raph
Quelle est la ligne à écrire pour diviser une chaine selon plusieurs critères ?
Mes critères sont les suivants : il faut retrouver les noms et prénoms d'une personne par rapport à une autre. Ces deux personnes peuvent être séparée par et, +, & ou parfois /
Exemples :
$personnes = Nom1 Prénom1 et Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 / Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 + Nom2 Prénom2
ou
$personnes = Nom1 Prénom1 & Nom2 Prénom2
$var = preg_split($pattern,$personnes)
Dans tous les cas, je dois retrouver
$var[0] = Nom1 Prénom1
$var[1] = Nom2 Prénom2
Quel est le pattern à écrire ??
Merci pour votre précieuse aide !
Raph
A voir également:
- Preg_split et expression régulière
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Avoir du ping expression ✓ - Forum jeux en ligne
- C quoi un ping? ✓ - Forum Réseau
- Expression de recherche - Guide
3 réponses
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.
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
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 !
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