Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
321 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Aide sur expression régulière

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide sur expression régulière

n°2320287
fabien44
Posté le 06-09-2018 à 14:28:40  profilanswer
 

Bonjour
 
j'en appelle aux connaisseurs des expressions régulières.
 
En PHP je dois découper une chaîne de caractères et récupérer dans un tableau les segments trouvés.
J'ai vu qu'on pouvait utiliser la fonction preg_match_all pour cela. Maintenant la question est quels sont les patterns à coder.
 
Mon besoin:
Je dois coder une recherche d'élèves qui parlent certaines langues avec un ou plusieurs niveaux associés (3 niveaux possibles:1,2 ou 3). La langue est codée sur 3 caractères.
 
Par exemple je cherche les élèves qui parlent l'anglais (niveaux 1), l'espagnol (niveaux 1 et 2) et le chinois (peu importe le niveau)
 
la string suivante de recherche est la suivante: "ENG(1),ESP(1,2),CHI"
 
Je veux récupérer dans un tableau les séquences suivantes:
Array( 1=> ENG(1), 2=> ESP(1,2), 3=> CHI)
 
Comment coder ça avec une expression régulière ou bien autre chose?
 
Merci par avance

mood
Publicité
Posté le 06-09-2018 à 14:28:40  profilanswer
 

n°2320303
rat de com​bat
attention rongeur méchant!
Posté le 06-09-2018 à 15:40:13  profilanswer
 

J'ai pas compris. :o  
Qu'est-ce que tu as comme info dans ta base de données, sous quelle forme exactement c'est stocké que élève X parle les langues Y et Z?
C'est pas plutôt un problème de SQL que de RegEx?

n°2320305
fabien44
Posté le 06-09-2018 à 15:50:30  profilanswer
 

J'ai trouvé, pour l'instant ça marche:
preg_match_all('#[a-zA-Z]+\((\d+(,|))+\)|[a-zA-Z]+#',$langues, $langniv);

n°2320364
B4X
Golden boy.
Posté le 07-09-2018 à 00:24:26  profilanswer
 

Sinon tu demande au champion qui a inséré ces données dans ta bdd de préférer "ENG(1);ESP(1,2);CHI" à "ENG(1),ESP(1,2),CHI"
comme ça c’est réglé avec un explode()
C’est dommage d’avoir recours à une regex pour un défaut de formatage en amont.


---------------
In vanitas veritas. THC & BTC
n°2320418
mechkurt
Posté le 07-09-2018 à 15:17:58  profilanswer
 

+1
Ce sera surement plus rapide de faire un :

Code :
  1. $tmp = str_replace('),', ');', $str);
  2. $t_tmp = explode(';', $tmp);


que de faire une regex...


Message édité par mechkurt le 07-09-2018 à 15:18:30

---------------
D3
n°2320425
fabien44
Posté le 07-09-2018 à 16:23:35  profilanswer
 

Merci :)
Effectivement la proposition de mechkurt est super pratique. Je vais adopter celle là

n°2320480
TotalRecal​l
Posté le 08-09-2018 à 21:49:57  profilanswer
 

Par contre elle ne fonctionnera pas si tu as un cas où tu dois splitter sans avoir de parenthèse fermante avant.  
Comme un CHI,TRUC ou un ESP,CHI.  
Là tu dois revenir à de la regex (genre split sur "(\w|\))\," sans les guillemets bien sûr).
 
Et +1 contre le blaireau qui a décidé de tout faire avec des virgules :o.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2320512
mechkurt
Posté le 10-09-2018 à 13:44:34  profilanswer
 

A ben chuis partis du principe que il y'avait toujours un niveau entre parenthèse, sinon effectivement ça ne marche pas... ^^


---------------
D3
n°2320514
gilou
Modérateur
Modzilla
Posté le 10-09-2018 à 14:50:41  profilanswer
 

En perl, ce serait ainsi :  

Code :
  1. use strict;
  2. use warnings;
  3. my $data = "ENG(1),ESP(1,2),CHI";
  4. my $i = 1;
  5. my %hash = map {($i++, $_)} split(/(?<=[A-Z)]),/, $data);
  6. # ou my @liste = split(/(?<=[A-Z)]),/, $data); si c'est une liste que tu veux
  7. # et on le vérifie:
  8. my ($first, @others) = sort(keys(%hash));
  9. print "$first => $hash{$first}";
  10. print ", $_ => $hash{$_}" foreach (@others);

E:\Programming\Perl>perl testreg.pl
1 => ENG(1), 2 => ESP(1,2), 3 => CHI


A toi d'adapter au php.
 
A+,


Message édité par gilou le 10-09-2018 à 14:53:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Aide sur expression régulière

 

Sujets relatifs
[Résolu][Expression Régulière] Besoin d'aideBesoin d'aide pour une expression régulière
[expression reguliere] besoin d'aideAide sur une expression régulière pour preg_replace()
Besoin d'aide pour une expression régulièreexpression régulière
[Résolu] Besoin d'aide pour syntaxe expression régulière[JS] Aide pour une petite expression régulière
Aide pour une expression régulièreBesoin d'aide pour un remplacement de chaine par expression régulière.
Plus de sujets relatifs à : Aide sur expression régulière


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR