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

Langage Perl Discussion :

Regex free tester


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Points : 10
    Points
    10
    Par défaut Regex free tester
    Savez-vous s'il y a de testeurs gratuits et pas trop compliqués pour apprendre les regex de Perl?
    Merci !

    j'ai trouvé ça

    http://www.solmetra.com/scripts/regex/

    mais je n'ai pas compris comment ça marche

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Le one-line perl ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -E 'say "mon texte" =~ /ma regexp/ ? "Yes" : "No"'
    Et pour extraire des données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -E 'say "Found: ", join ", ", "mon texte" =~ /(\w+)/g'
    (one-line écrit pour Unix/Cygwin)

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Oui, un uniligne permet de tester. J'utilise aussi souvent le debugger en mode interactif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ perl -de 42
     
    Loading DB routines from perl5db.pl version 1.32
    Editor support available.
     
    Enter h or `h h' for help, or `man perldebug' for more help.
     
    main::(-e:1):   42
      DB<1> print "true" if "mon texte" =~ /mon\s+..x/;
    true
      DB<2>

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Jurafsky Voir le message
    Savez-vous s'il y a de testeurs gratuits et pas trop compliqués pour apprendre les regex de Perl?
    Merci !

    j'ai trouvé ça

    http://www.solmetra.com/scripts/regex/

    mais je n'ai pas compris comment ça marche
    Coucou voici un début de solution,

    Enter regular expression here:
    %[a-z]*%i

    Enter your data here:
    n'importe quoi qui match avec la regexp

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    merci pour les réponses!
    J'ai trouvé utiles ça

    regexlib/

    et ça

    regex tester




    J'ai un petit problème:

    Je voudrais identifier avec une expression reg, des noms et prenoms qui se trouvent dans un texte.

    Par example le texte pourrait etre:
    Michelle Dubois mange une pomme, son fils, Jérèmy Dubois n'aime pas les pommes.

    Output:
    Michelle Dubois
    Jérèmy Dubois


    J'avais pensé à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (([A-Z]\w+)\s([A-Z]\w+))+

    mais ça ne marche pas

    conseils?

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ben, en fait, ça marche partiellement, comme le montre cette session sous le debugger Perl:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      DB<11> $c = "Michelle Dubois mange une pomme, son fils, Jeremy Dubois n'aime pas les pommes";
     
      DB<12> print "true" if $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/;
    true
      DB<13> print $1 if $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/;
    Michelle Dubois
      DB<14>
    Ou même, en utilisant un while et le modificateur /g:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      DB<16> $c = "Michelle Dubois mange une pomme, son fils, Jeremy Dubois n'aime pas les pommes"
     
      DB<17> print "$1 " while $c =~ /(([A-Z]\w+)\s([A-Z]\w+))+/g;
    Michelle Dubois Jeremy Dubois
      DB<18>
    Mais si tu as la phrase: "La France est un pays de 550.000 km²", tu vas récupérer "La France", à cause de la majuscule en début de phrase.

    (Si tu mets des accents sur Jérémy, ça peut poser des problèmes d'encodage dans certains cas.)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Pour resoudre ce problème on pourrait stocker les noms dans un tableau pour éviter les erreurs!

    en fait, pourquoi utiliser \w si l'on peut utiliser [A-Z] ? Pourquoi certain fois il y a des regex très similaires? Quand il est mieux utiliser l'un au lieu de l'autre?

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    \w représente les caractères alphanumériques (majuscules, minuscules et chiffres) plus le caractère souligné, donc: [A-Za-z0-9_]. C'est beaucoup plus large que [A-Z].

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    \w représente les caractères alphanumériques (majuscules, minuscules et chiffres) plus le caractère souligné, donc: [A-Za-z0-9_]. C'est beaucoup plus large que [A-Z].
    J'ai compris. Donc je peux utiliser quand meme soit [A-Za-z0-9_], soit \w !

    J'ai une autre question.

    Je voudrais chercher dans un .txt les mots qui ont une double consonne à l'interieur. J'avais pensé à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    #!usr/bin/perl -w
    use diagnostics;
    use warnings;
     
    my ($file, $line);
    my (@words, @duble);
     
    $file = "text.txt";
     
    open (F, "<", "$file");
     
    while(defined($line = <F>)) {
    	chomp($line);
    	@words = split(/\pP|\sP|\sS/, $line);
    	@double = grep(/([^aeiouAEIOU]){2}/, @words);
    	print "@double\n";
    	}
     
    close (F);
    Mais ça ne marche pas. Je ne comprends pas pourquoi!

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour trouver les doubles consommes, il faut écrire la 2e lettre comme étant identique à la première, comme ceci :


  11. #11
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ce n'est suffisant que s'il y n'y a que du texte. Cette expression va détecter les doubles chiffres, les doubles espaces, les doubles .., etc.


    Je pense qu'une classe de caractère négative n'est pas la bonne solution. Peut-être quelque chose du genre:

    /([b-df-hj_np-tvwxzB-B-DF-HJ-NP-TVWXZ])\1/

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Exact lolo, j'avais repris la regexp de Jurafsky pour une consonne, sans voir qu'elle était trop large.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 30
    Points : 10
    Points
    10
    Par défaut
    j'avais trouvé moi aussi l'expression "\1".. qu'est-ce que ça veut dire? il y a aussi un \2 \3?

    est-il la meme chose avec $1, $2 ecc?

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Oui, mais à usage exclusif à l'intérieur de l'expression régulière.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/01/2013, 16h01
  2. regex pour tester un mail ou une URL
    Par rambc dans le forum Général Python
    Réponses: 10
    Dernier message: 23/02/2010, 12h37
  3. [RegEx] Tester un regex sur un champ de formulaire
    Par Olivier Regnier dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2007, 23h45
  4. Tester si une variable contient une regex valide
    Par iblis dans le forum Langage
    Réponses: 6
    Dernier message: 10/08/2007, 00h04
  5. [Regex] Comment tester une chaîne ASCII 7bits ?
    Par Raduris dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/03/2006, 09h42

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