CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Help] Regex

Kilmor69
Kilmor69
Niveau 30
09 janvier 2020 à 11:38:17

Bonjour,

Je sollicite votre aide car j'ai beaucoup de mal avec les regex, et je cherche à écrire un regex me permettant de faire une requête MongoDB qui me permet de matcher une chaine de caractères, jusqu'a un "." (Point). Ce point et tout ce qui le suit serait ignoré.
Cependant la présence du "." est facultative.

Exemple, je cherche en BDD un champ avec la valeur AZERTY :
- champ = AZERTY : match
- champ = AZERTY.100 : match
- champ = AZE.RTY : match pas
- champ = AZERTYU : match pas

Donc vraiment retrouver l'équivalent jusqu'a un point, et rien d'autre. Et si point il y a, alors ça match. S'il y en a pas mais que la chaîne de caractère n'a pas d'ajout a la fin ça match aussi.

Actuellement j'ai :
- AZERTY(?=\.) : fonctionne pour AZERTY. mais pas AZERTY sans point
- AZERTY[^\.]* : fonctionne avec AZERTY et AZERTY. mais match aussi avec AZERTYUIOP car tant que ce n'est pas suivi d'un point c'est bon

Merci, si c'est pas assez clair je préciserai davantage a travers des exemples.

PS : pas la peine de me sortir la requête complete, juste le regex pour que je comprenne.

alpha017
alpha017
Niveau 10
09 janvier 2020 à 16:15:28

Je ne suis pas un pro du regex mais ton problème m’intéresse.
J’ai trouvé cette solution: \bAZERTY\b

Tests: https://regex101.com/r/qov1G4/2/

Mais je ne sais pas si c'est applicable à une query MongoDB

deepblue
deepblue
Niveau 16
09 janvier 2020 à 16:16:34

À tester : AZERTY[A-Z]{0}\.?

Kilmor69
Kilmor69
Niveau 30
09 janvier 2020 à 16:30:08

Alpha ta solution marche, merci. Cependant je vois que ca n'est pas exclusif au "."
En effet ca match aussi avec la plupart des caractères spéciaux que j'ai testé. Hormis le underscore qui a le meme effet que le point.
Ça pourrait suffir en dépannage temporaire, mais je risque d'avoir des imprévus a l'avenir car mon souci est vraiment specifique au point.

Deepblue malheureusement non ça ne donne pas le resultat escompté, merci quand meme :)

deepblue
deepblue
Niveau 16
09 janvier 2020 à 16:32:25

Et ça https://regex101.com/r/qov1G4/3 ?

alpha017
alpha017
Niveau 10
09 janvier 2020 à 16:32:53

Le 09 janvier 2020 à 16:30:08 Kilmor69 a écrit :
Alpha ta solution marche, merci. Cependant je vois que ca n'est pas exclusif au "."
En effet ca match aussi avec la plupart des caractères spéciaux que j'ai testé. Hormis le underscore qui a le meme effet que le point.
Ça pourrait suffir en dépannage temporaire, mais je risque d'avoir des imprévus a l'avenir car mon souci est vraiment specifique au point.

Deepblue malheureusement non ça ne donne pas le resultat escompté, merci quand meme :)

Par contre je viens de tester, et le string AZERTY.AZERTY match 2 fois. Je sais pas si c'est juste dans ton cas, et match également après le ".".

Message édité le 09 janvier 2020 à 16:37:09 par alpha017
alpha017
alpha017
Niveau 10
09 janvier 2020 à 16:43:31

Le 09 janvier 2020 à 16:32:25 deepblue a écrit :
Et ça https://regex101.com/r/qov1G4/3 ?

On dirait que c'est plus proche d'une solution correct que la mienne. Donc je partirai plus dans ce sens.

Kilmor69
Kilmor69
Niveau 30
09 janvier 2020 à 16:52:21

Oui en effet ça répond bien au besoin.

C'est quand meme du vrai charabia les regex, j'ai du mal a comprendre comment vous vous y retrouvez !! Même en lisant les explications données a côté je capte pas tout..
Bref faut que je taf tout ça. Merci à vous en tout cas

godrik
godrik
Niveau 30
09 janvier 2020 à 17:06:07

Je dois dire que le langage des regexp est en general particulierement imboufable. Perso, je prefererais specifier l'automate sous jacent.

Kilmor69
Kilmor69
Niveau 30
09 janvier 2020 à 19:01:24

C'est a dire spécifier l'automate sous jacent ?

Meme si les regex m'embrouillent totalement, je dois avouer qu'elles m'arrangent bien dans plusieurs requêtes noSql ou du traitement en Java. Mais bon vla le langage de martien

godrik
godrik
Niveau 30
09 janvier 2020 à 21:13:06

Les expressions regulieres sont equivalent a des automates deterministes a etat finis:
https://en.wikipedia.org/wiki/Deterministic_finite_automaton
https://en.wikipedia.org/wiki/Regular_expression
Et je trouve les notations de regexp tellement imbitable, que je prefereais specfier l'automate.

Kilmor69
Kilmor69
Niveau 30
10 janvier 2020 à 10:12:23

Mmm ca a l'air bien compliqué aussi 🤯
Mais en lisant brièvement la description, il est possible en effet que son utilisation soit plus compréhensible.. une fois le concept assimilé

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment