[RESOLU] Expression régulière : trouver une valeur parmi une liste de valeurs ?

Petit nouveau ! | 2 Messages

12 avr. 2019, 11:33

Bonjour,

dans un champ SQL - appelons le CHAMP_A -, sont stockés des identifiants numériques sous la forme d'une liste d'entiers séparés par des virgules.
Ces champs peuvent stocker une ou plusieurs valeurs (uniques).
Par ex.
- un tel champ pourrait contenir : "1,12,21,131,234,28" (cas 1)
- ou bien : "45,121,35"
- ou bien : "12,24" (cas 3)
- ou bien : "32,12" (cas 4)
- ou bien juste : "12" (cas 5)

Je cherche à faire un test qui trouverait les enregistrements dont le champ CHAMP_A contient tel ou tel identifiant.
Par ex. je veux trouver les enregistrements dont le CHAMP_A contient la valeur "12"
Le problème est de trouver la bonne expression régulière qui permette de retourner le résultat voulu : cela suppose de gérer tous les cas possibles (où l'entier recherché est au début, à la fin, tout seul, parmi d'autres d'autres valeurs) et aussi d'exclure les cas où le nombre cherché est une partie d'autres nombres (par ex. la chaine "12" est contenue dans la chaine "121").

Pour les 5 cas pris en ex. ci-dessus :
- le cas 1 doit matcher / correspondre (car il y a bien le nombre 12 parmi les valeurs)
- le cas 3 doit matcher (12 est en début de chaine)
- le cas 4 doit matcher (12 est en fin de chaine)
- le cas 5 doit matcher (même si 12 est la seule valeur)
- MAIS le cas 2 ne doit PAS matcher (car 121, ce n'est pas 12)

Je n'arrive pas à construire la bonne regex pour cela.
Pour l'instant j'utilise celle-ci (/,?12,?/), mais le problème est qu'elle retourne 121 si l'on cherche 12...

Merci d'avance pour vos conseils et pistes.

JG

Mammouth du PHP | 1967 Messages

12 avr. 2019, 11:56

J'ai aimé le défi alors j'ai essayé ceci
https://regex101.com/r/Izpsp1/1

mais je pense qu'il y a un problème de conception de la base de donnée. si il faut pouvoir chercher dans un champs parmis plusieurs valeurs, alors cela aurait du étre une table séparé pour pouvoir faire la recherche via une jointure.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 2 Messages

13 avr. 2019, 09:46

Merci beaucoup pour la règle qui marche parfaitement !
Mais en effet il aurait mieux valu une autre structure de table.