IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[OCaml] Expressions régulières


Sujet :

Caml

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut [OCaml] Expressions régulières
    Bonjour, j'ai un petit probleme avec mon programme en OCAML, j'essaie de reconnaitre des morceaux de phrases dans une chaine de caractères, et ça marche bien sauf pour une : je veux que soit reconnu la phrase "r = bmp" ou la phrase "r = graph", avec la meme regexp. Pour l'instant, mon code donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    open Str ;;
     
    let rendu = Str.regexp_case_fold "^ *r *= *\(graph\)|\(bmp\) *$" ;;
     
    let s = "r = bmp" ;;
     
    Str.string_match rendu s 0 ;;
    et rien, à faire, ça ne marche pas. J'ai essayé évidement plein d'autres conbinaisons, mais rien à faire. Je précise que les " *" sont normaux, je veux qu'on puisse mettre autant d'espaces que l'on veut entre les mots, mais ça ça marche.
    En attendant vos lumières, prenez votre temps, je ne reviens que samedi prochain (études obligent).

    Merci d'avance, Le Mérovingien.
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    En dehors de considérations sur le fait que les regexs sont complètement illisibles en Caml (par rapport à Perl ou à Ruby), il y a nettement une erreur sur la position du "|", en effet en supposant que tout le reste soit correct ta regex reconnait "r = graph" ou "bmp" mais pas "r = bmp"... Tes parenthèses sont mal situées, elles doivent entourer l'ensemble de l'alternative.

    --
    Jedaï

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    Oui, ça je me doute qu'il y'a une erreur, mais j'avoue je ne vois pas du tout quoi modifier. Je pourrais faire un truc un peu plus "bourin" mais c'est plus résoudre le problème avec finesse, en utilisant le moins de cose possible, qui m'interesse. (ce script est pour moi, je n'ai rien à rendre ni temps imparti).
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

  4. #4
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par Jedai
    En dehors de considérations sur le fait que les regexs sont complètement illisibles en Caml
    Tout à fait d'accord... le seul gros problème, c'est que les mecs qui font Objective Caml sont de gros frappa-dingues d'Emacs... et ils ont eu la mauvaise idée de faire pareil !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Le Mérovingien
    Oui, ça je me doute qu'il y'a une erreur, mais j'avoue je ne vois pas du tout quoi modifier. Je pourrais faire un truc un peu plus "bourin" mais c'est plus résoudre le problème avec finesse, en utilisant le moins de cose possible, qui m'interesse. (ce script est pour moi, je n'ai rien à rendre ni temps imparti).
    Je répète :
    Tes parenthèses sont mal situées, elles doivent entourer l'ensemble de l'alternative.
    Je vois mal comment je peux être plus clair... sauf en te donnant le code. Et si tu n'as pas compris cette phrase, je crains d'encourager un comportement type cargo-cult en procédant ainsi...

    --
    Jedaï

  6. #6
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Tout à fait d'accord... le seul gros problème, c'est que les mecs qui font Objective Caml sont de gros frappa-dingues d'Emacs... et ils ont eu la mauvaise idée de faire pareil !
    Pour ceux qui n'aiment pas ça, il y a des bindings de PCRE pour Ocaml (http://pcre-ocaml.sourceforge.net/), c'est ce que j'utilise personnellement (même si je suis un "frappa-dingue" d'Emacs à côté de ça )
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    Bonjour bonjour,

    Tout d'abord merci pour vos réponses, qui je trouve critique plus les regexp d'ocaml et ne répondent pas vraiment à ma question, mais c'est pas grave, car je me suis débrouillé autrement, je pense que meme si j'avais trouvé la solution du problème que je vous avais expliqué, ça ne m'aurait pas servi.
    Cependant, j'aimerai juste signaler à Jedai que me dire "tes parenthèses sont mal situer" et surtout de me le répéter alors que ça ne m'a pas vraiment aidé la première fois, ne m'a pas vraiment rendu service. Mais bon, comme je l'ai di, c'est pas grave.

    Je vous indique quand meme le code qui ne marche pas, après avoir essayer de remettre les parenthèses au bon endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let rendu = Str.regexp_case_fold "^ *r *= *\(\(graph\)|\(bmp\)\) *$" ;;
    ou
    let rendu = Str.regexp_case_fold "^ *r *= *\([graph|bmp]\) *$" ;;
    ou
    let rendu = Str.regexp_case_fold "^ *r *= *[\(graph\)|\(bmp\)] *$" ;;
    Voilà, tout ça me marche pas, j'ai du en essayer encore plein, je ne m'en souviens plus. J'aimerais quand meme comprendre pourquoi tout ça me fonctionne pas, et ce qu'il faut mettre pour que ça marche.

    A bientôt, et merci
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Le Mérovingien
    Bonjour bonjour,

    Tout d'abord merci pour vos réponses, qui je trouve critique plus les regexp d'ocaml et ne répondent pas vraiment à ma question, mais c'est pas grave, car je me suis débrouillé autrement, je pense que meme si j'avais trouvé la solution du problème que je vous avais expliqué, ça ne m'aurait pas servi.
    Cependant, j'aimerai juste signaler à Jedai que me dire "tes parenthèses sont mal situer" et surtout de me le répéter alors que ça ne m'a pas vraiment aidé la première fois, ne m'a pas vraiment rendu service. Mais bon, comme je l'ai di, c'est pas grave.
    J'ai précisé qu'elles devaient entourer l'ensemble de l'alternative...

    Citation Envoyé par Le Mérovingien
    Je vous indique quand meme le code qui ne marche pas, après avoir essayer de remettre les parenthèses au bon endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    let rendu = Str.regexp_case_fold "^ *r *= *\(\(graph\)|\(bmp\)\) *$" ;;
    ou
    let rendu = Str.regexp_case_fold "^ *r *= *\([graph|bmp]\) *$" ;;
    ou
    let rendu = Str.regexp_case_fold "^ *r *= *[\(graph\)|\(bmp\)] *$" ;;
    Voilà, tout ça me marche pas, j'ai du en essayer encore plein, je ne m'en souviens plus. J'aimerais quand meme comprendre pourquoi tout ça me fonctionne pas, et ce qu'il faut mettre pour que ça marche.

    A bientôt, et merci
    En fait il semblerait que tu ais un problème de syntaxe des regexps en OCaml (qui comme je le disais est totalement pourrie... c'est pas vraiment de ta faute j'admets ) : tu as écrit | au lieu de \|
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let rendu = Str.regexp_case_fold "^ *r *= *\(graph\|bmp\) *$" ;;
    devrait fonctionner (mais je ne garantis rien : je n'ai pas de OCaml sous la main et la syntaxe est vraiment laide...).

    --
    Jedaï

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    En effet, ça marche impec comme ça, je n'aurais jamais essayé de mettre un \ devant le |, ça parait tellement "lourd" comme notation, et je reconnais donc que les regexp sont pourries en ocaml .

    Merci beaucoup, je mets ce sujet en résolu.

    @+

    Le Mérovingien
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ocaml] Expressions régulières
    Par RosaliRosali dans le forum Caml
    Réponses: 11
    Dernier message: 11/01/2009, 14h57
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo