Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[regexp] aide sur une recherche

14 réponses
Avatar
GLH
Bonjour,
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine

exemple
N = 3 , le caractère est A

AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai

Merci

glh
Reponse sur le groupe svp (adresse non valide)

10 réponses

1 2
Avatar
Ronan Le Hy
GLH a écrit:
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine


Pour compter les caractères, tr/// fait l'affaire.

lehy> perl -ple 's#$#tr/A// == 3 ?" : vrai" : " : faux"#e'

AHFJADJFAKF
AAKKFMLEFL
FJAKKLAKAK
FKALAALALP
KJAAKLALLL
KJAAALOPLL
AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai

HTH

--
Ronan

Avatar
Michel Rodriguez
Ronan Le Hy wrote:

Pour compter les caractères, tr/// fait l'affaire.

lehy> perl -ple 's#$#tr/A// == 3 ?" : vrai" : " : faux"#e'


Pareil, avec l'architecture de test autour ;--)

#!/usr/bin/perl -w
use strict;

use Test::More qw(no_plan);

my $NB= 3;
my %ok= ( vrai => 1, faux => '');

while( <DATA>)
{ chomp;
my( $pattern, $result)= split /s*:s*/;
is( matche( $pattern, $NB), $ok{$result}, "tested $pattern ($result)");
}

# c'est la que ca se passe vraiment!
sub matche
{ my( $pattern, $nb)= @_;
my $nb_occ= ($pattern =~ tr{A}{A});
return ($nb_occ == $nb);
}

__DATA__
AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai
__
Michel Rodriguez
Perl &amp; XML
http://xmltwig.com

Avatar
GLH
"Ronan Le Hy" a écrit dans le message de news:
3f3b5bf0$0$26408$
GLH a écrit:
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine


Pour compter les caractères, tr/// fait l'affaire.

lehy> perl -ple 's#$#tr/A// == 3 ?" : vrai" : " : faux"#e'

AHFJADJFAKF
AAKKFMLEFL
FJAKKLAKAK
FKALAALALP
KJAAKLALLL
KJAAALOPLL
AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai

HTH

--
Ronan



merci
a une petite precision près.
j'ai posté ici par depit de ne pas trouver de groupe fr.comp.text.regexp
(curieux d'ailleurs qu'il n'y ait pas de groupe regexp)

j'ai besoin d'utiliser cette expression avec java 1.4 et son tout nouveau
module java.util.regexp

et je doute que java soit très a l'aise avec des commandes strictement perl.
(d'ailleurs il me l'a dit...)

glh


Avatar
Ronan Le Hy
Michel Rodriguez a écrit:
Ronan Le Hy wrote:
Pour compter les caractères, tr/// fait l'affaire.

lehy> perl -ple 's#$#tr/A// == 3 ?" : vrai" : " : faux"#e'


Pareil, avec l'architecture de test autour ;--)

#!/usr/bin/perl -w
use strict;

use Test::More qw(no_plan);

[snip]
my $nb_occ= ($pattern =~ tr{A}{A});
[resnip]


Tu peux gagner une frappe de caractère, et supprimer une douloureuse
redondance dans ce code :
my $nb_occ= ($pattern =~ tr{A}{});
^^

:)

--
Ronan

It's a kludge, inside a hack, wrapped in a crock.
Chip Salzenberg


Avatar
GLH
"Ronan Le Hy" a écrit dans le message de news:
3f3b624d$0$26408$
GLH a écrit:
"Ronan Le Hy" a écrit dans le message de news:
3f3b5bf0$0$26408$
GLH a écrit:
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine


lehy> perl -ple 's#$#tr/A// == 3 ?" : vrai" : " : faux"#e'


j'ai besoin d'utiliser cette expression avec java 1.4 et son tout
nouveau


module java.util.regexp


Des expressions régulières pour pareille tâche, c'est vraiment se
compliquer la vie.
Berk, berk, berk. Je vais poster du Java. Non testé (mais piqué ailleurs).

int count = 0;
for (int i = 0; i < monstring.length(); i++)
{
if (monstring.charAt(i) == '/')
{
count++;
}
}

HTH

--
Ronan

on devient hors sujet...

cependant, j'avoue avoir été hors sujet depuis le debut puisqu'on est dans
fr.comp.lang.perl; mais je n'aime pas trop les querelles de language, il y
en a assez entre C++ et Java, on va pas rajouter Perl la dedans.

il s'agit d'une regexp parmi tant d'autre, je ne vais pas m'amuser à coder
autant de methodes de controle que j'ai d'expressions regulières (ca , c'est
compliquer la vie), ou alors je ne vois vraiment pas l'utilité même d'une
expression regulière. d'autant qu'un pattern , on peut le mettre dans un
fichier de propriété, alors que le code, il faut le modifier.

je repose donc ma question en ajoutant : "ou bien, quel est le bon groupe
pour demander un coup de main sur les expressions regulières sans
consideration sur le langauge de programmation qui va les utiliser ?" .

glh




Avatar
-- Thomas vO --
salut,

GLH wrote:
je repose donc ma question en ajoutant : "ou bien, quel est le bon groupe
pour demander un coup de main sur les expressions regulières sans
consideration sur le langauge de programmation qui va les utiliser ?" .


j'ai pas tout bien suivi, mais tu trouveras peut-être ton bonheur dans :
http://www.enstimac.fr/~vanouden/info/regexp_tutorial.pdf

glh


cétoo,

--Thomas vO --

Avatar
Ronan Le Hy
GLH a écrit:
"Ronan Le Hy" a écrit
GLH a écrit:
"Ronan Le Hy" a écrit
GLH a écrit:
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine


Des expressions régulières pour pareille tâche, c'est vraiment se


compliquer la vie.


il s'agit d'une regexp parmi tant d'autre, je ne vais pas m'amuser à coder
autant de methodes de controle que j'ai d'expressions regulières (ca , c'est
compliquer la vie), ou alors je ne vois vraiment pas l'utilité même d'une
expression regulière.


J'allais me lancer dans une explication de pourquoi je pense que non,
vous ne voyez pas l'utilité d'une expression régulière (ou vous avez mal
présenté votre problème).

Mais vous avez essayé de taper "java regex tutorial" dans Google, bien
sûr ? Une fois que vous aurez essayé vous-même, et si vous avez une
expression régulière (et pas du code Java) qui ne semble pas faire ce
que vous attendez, postez-la ici, nous pourrons vous aider.

--
Ronan

[In OCaml,] you can do *almost* everything with 'functor' and 'include'
and/or phantom polymorphic variant type parameters on abstract types
with parameter variance annotations.
James Woodyatt





Avatar
Ronan Le Hy
Michel Rodriguez a écrit:
Ronan Le Hy wrote:
Michel Rodriguez a écrit:
Ronan Le Hy wrote:
Pour en revenir au probleme de depart, ja connais pas Java, mais en s'en


tenant a des expressions regulieres, pour peu que Java retourne aussi le
nombre de substitutions, ca marche aussi:


He, "pour peu que"... Visiblement, c'est déjà trop demander.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matcher.html#replaceAll(java.lang.String)

--
Ronan, qui a jeté XML::Twig pour YAML :)

<gnat> TorgoX: you're rapidly learning, I see, that XML is a fucking
piece of festering shit which has no more justification for walking
God's clean earth than a dung beetle with diarrhoea.



Avatar
Paul GABORIT
À (at) Thu, 14 Aug 2003 11:22:46 +0200,
"GLH" écrivait (wrote):
Bonjour,
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine

exemple
N = 3 , le caractère est A

AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai

Merci

glh
Reponse sur le groupe svp (adresse non valide)



L'expression suivante convient :

^[^A]*(A[^A]*){3}$

Sauf que ce n'est pas la bonne manière de faire car c'est très inefficace !

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
Remove '.OOO' from e-mail address - Supprimez '.OOO' de l'adresse e-mail

Avatar
Samuel Mouniée
Bonjour,

Paul GABORIT wrote:
À (at) Thu, 14 Aug 2003 11:22:46 +0200,
"GLH" écrivait (wrote):

Bonjour,
je cherche un pattern correspndant à :
il y a exactement N occurences consecutives ou non consecutives d'UN
caractère dans une chaine

exemple
N = 3 , le caractère est A

AHFJADJFAKF : vrai
AAKKFMLEFL : faux
FJAKKLAKAK : vrai
FKALAALALP : faux
KJAAKLALLL : vrai
KJAAALOPLL : vrai

Merci

glh
Reponse sur le groupe svp (adresse non valide)




L'expression suivante convient :

^[^A]*(A[^A]*){3}$

Sauf que ce n'est pas la bonne manière de faire car c'est très inefficace !



je propose "tr/A/A/" et de faire un "if" apres.

.s'nuoM


1 2