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 :cry:
Version imprimable
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 :cry:
Le one-line perl ?
Exemple :
Et pour extraire des données :Code:perl -E 'say "mon texte" =~ /ma regexp/ ? "Yes" : "No"'
(one-line écrit pour Unix/Cygwin)Code:perl -E 'say "Found: ", join ", ", "mon texte" =~ /(\w+)/g'
Oui, un uniligne permet de tester. J'utilise aussi souvent le debugger en mode interactif.
Code:
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>
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:(([A-Z]\w+)\s([A-Z]\w+))+
mais ça ne marche pas :calim2:
conseils?
Ben, en fait, ça marche partiellement, comme le montre cette session sous le debugger Perl:
Ou même, en utilisant un while et le modificateur /g:Code:
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>
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.Code:
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>
(Si tu mets des accents sur Jérémy, ça peut poser des problèmes d'encodage dans certains cas.)
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?:roll:
\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:
Mais ça ne marche pas. Je ne comprends pas pourquoi!:cry:Code:
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);
Pour trouver les doubles consommes, il faut écrire la 2e lettre comme étant identique à la première, comme ceci :
Code:/([^aeiouAEIOU])\1/
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/
Exact lolo, j'avais repris la regexp de Jurafsky pour une consonne, sans voir qu'elle était trop large.
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?
Oui, mais à usage exclusif à l'intérieur de l'expression régulière.