Expression rationnelle

Fermé
rudy - 11 janv. 2002 à 15:31
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 - 18 mars 2003 à 22:36
recherche urgent des renseignements sur les expressions rationnelles en javascript :

je voudrais comparer des mots entres dans un moteur de recherche et ceux entres dans la base de donnés afin d'améliorer mon moteur .
PB: en entrant le mot "bleu" et "b" j'obtiens le meme resultat.
merci d'avance!!

6 réponses

Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
11 janv. 2002 à 18:09
var str = "xxxabbcaxxx";
var regex = /a[bc]*a/;
/* var regex = new RegExp("a[bc]*a"); */
if (regex.test(str) {...}
/* if (str.match(regex)) {...} */

Source : http://www.diku.dk/teaching/2001e/e01.718/Lectures/regex/15.html et http://www.diku.dk/teaching/2001e/e01.718/Lectures/regex/contents.html



-= Bobinours =-
0
Bonjour....je commence un cours d'informatique et je suis complètement perdue.......

c'est quoi une expression rationnelle?
(explication, exemples d'expressions rationnelles et exemples d'application d'expression rationnelles)

Quels logiciels utilise les expressions rationnelles?

Comment on fait pour utiliser les expression rationnelles avec Perl?
(instruction utiliser en perl? opérateurs utilisée en perl?)

C'est quoi un métacaractère?? quels sont ceux qui conviennent aux expressions rationnelles?

Merci de bien vouloir m'aider....parce que ca fait déja plusieurs jours que je tente de répondre à ces questions en cherchant sur le net...et je ne trouve rien de clair et précis qui me permettrait de bien comprendre

à bientot!!
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
18 mars 2003 à 12:21
Salut !

En fait ils parlent d'expression régulière (et non rationnelle).

Une expression régulière permet de vérifier si une chaîne de caractères correspond ou non à un format précis.

Un exemple:
Je veux les mots commençant par la lettre 'a' et se terminant par 'e'. L'expression régulière est a.*e
. veut dire "n'importe quel caractère".
* veut dire "répété un certain nombre de fois."

Ainsi:
ae est accepté par l'expression régulière.
arbre est accepté.
arme est accepté.
are est accepté
arret est refusé.
brousse est refusé
art est refusé.
arte est accepté.


Dans les expressions régulières, certains caractères ont des significations précises:
. "n'importe quel caractère."
* "répété 0 fois ou plus."
+ "répété 1 fois ou plus."
{x,y} "répété de x à y fois."
^ "début de ligne"
$ "fin de ligne"
etc.
(voir la doc du module pcre ou perl ou autre pour la signification des autres symboles).

Ces symboles sont appelés 'metacaractères' car ils peuvent représenter un ensemble de caractères différents.

On retrouve les expressions régulière un peu partout: là où il faut vérifier que ce que l'utilisateur a entré est correct, pour rechercher du texte, etc.

La référence est le module PCRE d'Unix que l'on retrouve dans beaucoup de langages (shell, grep, perl...). On peut utiliser les expressions régulières dans pratiquement tous les langages.

Les logiciels utilisent généralement des versions simplifiées (par exemple: la recherche de fichiers sous Windows.)


Avec une expression régulière, on peut faire différentes choses:
- vérifier qu'une chaîne entrée a le bon format.
- recherche toutes les occurences (par exemple recherche toutes les adresses email dans un fichier).
- remplacer toutes les occurences (par exemple, rechercher/remplacer).



Les expressions régulières permettent de faire des contrôles très stricts et efficaces.
Mais elles ne sont pas sans failles.
Inconvénients:
- elles sont difficiles à lire. ça veut dire qu'on peut rapidement faire des erreurs.
- dans certaines expressions, on peut exploser la limite de récursion, et donc planter son programme.
- avant d'utiliser une expression régulière, elle doit être compilée (transformée en machine à états). Cette compilation prend du temps, et ça peut être gênant quand on arrête pas de changer d'expression régulière.
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
18 mars 2003 à 13:34
Salut sebsauvage ;-)

"Expressions Rationnelles" existe également. C'est le terme traduit de l'anglais vers le français que l'on trouve dans de nombreux ouvrages.

En ce qui me concerne, je ne l'emploie jamais, lui préférent de loin "Expressions Régulières", beaucoup plus proche de son équivalent anglais ainsi que de "Regex" (son abréviation).

Par contre, j'avais homi les langages natifs et fonctions Unix qui sont précurseurs (il me semble).
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655 > Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013
18 mars 2003 à 14:09
ah ok.
Je n'avais pas rencontré ce vocabulaire "expression rationnelles".
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504 > Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013
18 mars 2003 à 14:21
Jète un oeil sur la doc officielle PERL :
http://www.enstimac.fr/Perl/DocFr/perlre.html
0
salut,

j'pense que tu devrais trouver quelques p'tits trucs interessant ici http://www.perl-gratuit.com/traduction/doc_fr.html
et ici http://developpeur.journaldunet.com/tutoriel/cgi/010315cgi_expreg.shtml

(dernier p'tit mot : résultats trouvés en tappant "expressions régulières perl" sur google..........)

a +
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
18 mars 2003 à 03:04
Salut amélie,
Si les liens ci-dessus ne t'aide pas, voici en deux mots ce que sont les expressions rationnelles, plus connues sous le nom d'expressions régulières (Regular Expressions ou RegEx en anglais).

Les expressions régulières sont un outil puissant que fournissent certains langages de programmations (PERL était le plus reconnu).

Les regex sont une sorte de motif (un format) qu'il faut appliquer à une chaine de caractères.

Voici un exemple d'utilisation simple :

my $variable = "01-01-2000";
if ( $variable =~ m/2000/ ) {
print "La date contient la valeur : 2000";
}


L'instruction de correspondance (match) est :
m//;
Elle est utilisée avec l'operateur :
=~
qui correspond a :
LA_VARIABLE_CONCERNEE =~ (correspond-t-elle) m/AU_MOTIF/;

La regex est : 2000
(ce qui se trouve entre les deux slashs de : m//)

Dans une regex, chaque caractère correspond à sa valeur. Ici, "2000" cherche le caractères "2" puis "0" et "0" enfin "0".
Si ces caractères sont présents dans la chaine $variable alors la condition renvoie vrai.


Voici un autre exemple plus complexe et plus intéressant :

my $variable = "01-01-2000";
if ( $variable =~ m/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/ ) {
print "La date : ". $1 ."/". $2 "/". $3 ." est au bon format : jj-mm-aaaa";
}


La regex est ici : ^([0-9]{2})-([0-9]{2})-([0-9]{4})$

Maintenant interviennent le puissants Meta-Caractères.
Certains caractères, contrairement aux autres, ne valent pas leur valeur dans le motif, mais ont une signification particulière en fonction d'où ils sont utilisés.

^ ---> Utilisé un début de regex, il indique que le motif doit se trouver en début de chaine.
$ ---> Utilisé un fin de regex, il indique que le motif doit se trouver en fin de chaine.
\d ---> correspond à un chiffre (digit) on aurait pu l'écrire [0-9] (un chiffre compris entre 0 et 9).
{2} ---> indique le nombre de fois que doit se répéter le caractère (ici 2, on cherche deux chiffres).
() ---> enfin les parenthèses. Elles permettent de mémoriser la valeur trouvée entre elles afin de les utiliser plus tard grace à $1, $2, $3... respectivement à l'ordre d'apparitions des parenthèses.
- ---> Le tiret en dehors de crochets correspond à sa valeur (tiret ou signe moins).

Dans cette regex, on recherche en début de chaine : 2 chiffres (mis en mémoire dans $1), suivi d'un tiret et de 2 autres chiffres (mis également en mémoire dans $2), un tiret, et enfin 4 chiffres (mis en mémoire dans $3) qui finissent la chaine.
(Le format : 01-01-2000 en gros)


Ici, tu trouveras la doc française complète des regex en PERL : http://www.mongueurs.net/perlfr/perlre.html

Et ici, le summum des regex par japhy (en anglais) : http://japhy.perlmonk.org/book/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
merci pour les réponses que vous m'avez apporté...

mais quelque trucs sont encore un peu brouille:

connaissez vous des noms précis de LOGICIEL qui permetent d'exploiter les expressions rationnelles
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
18 mars 2003 à 22:36
Toue les compilateurs et interpréteurs de langages implémentant les REGEX.

- PERL avec l'interpréteur Windows http://www.ActivePerl.com
- Python avec l'interpréteur Windows ActivePython sur http://www.ActiveState.com
- PHP ( http://php.net )
- Java doit avoir des classes.
...
Et encore une tripotée de langages.
0