Chrooter apache
Matériel
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Graver en ligne de commande
Astuces
Ajout d'une imprimante
Réseau
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Sécurité
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Faire des sauvegardes incrémentales
Divers
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
Compiler ses rpms
Liens
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Traductions LG
Toutes les traductions
Traductions Phrack
Toutes les traductions

Il y a actuellement 3 visiteurs connectés sur le site !

Google
Les expressions rationnelles
Les expressions rationnelles

 

Introduction
Quelques exemples avec grep
Quelques exemples en PERL
Les méta-caractères
Ecriture des motifs
Expressions régulières simples
Ixpressions régulières étendues

 

Introduction

# Le livre de référence utilisé : Introduction à PERL (O'Reilly)
# Les expressions rationnelles (ou régulières) sont des critères ou modèles de recherche (pattern) dans les chaines de caractères. Les objectifs peuvent être simplement de sélectionner suivant ce critère, ou d'effectuer des traitements comme des subtitutions sur les chaines trouvées.
# Leur utilisation s'étend de certains filtres shell : grep, sed, awk, vi , emacs .. à des langages de scripts : perl, php .. et aux éditeurs de texte : vi , emacs
# Attention ! certains caractères spéciaux sont communs avec les caractères génériques de désignation de fichiers, mais ils ont une interprétation différente. Donc il faut toujours prêter attention au contexte

Exemples avec grep

grep abc fichier recherche la chaine abc dans toutes les lignes du fichier. Les lignes trouvées sont envoyées sur la sortie standard, éventuellement redirigée.
grep " " fichier recherche les lignes qui contiennent un (et un seul) espace entre 2 mots
grep "ab*c" fichier, idem avec 0 ou plusieurs occurrences de la lettre b
grep "^s.*n$" fichier, reconnait les lignes débutant par s (^s), finissant par n (n$), avec éventuellement des caractères (quelconques) intermédiaires (.*)
# grep "^[a-zA-Z][a-zA-Z0-9]*" [a-f]*.txt recherche les chaines commençant par une lettre suivie d'un nombre qcq de caractères alphanumériques, dans tous les fichiers dont les noms débutent par une lettre de a à f avec une extension .txt

Quelques exemples en PERL

Une expression rationnelle est une chaine encadrée (en PERL) par /../, appelé opérateur de correspondance, qui applique le modèle par défaut sur la variable $_, et renvoie vrai ou faux. Par exemple, sur la ligne courante d'un fichier, contenue dans $_, recherche de la séquence az :

if (/az/) {
print $_ ;
}


Pour appliquer le modèle à une autre variable, il faut utiliser l'opérateur =~ comme dans l'exemple :

if ($var =~ /az/) {
print $var ;
}


Exemples script cherche-az, pour rechercher la séquence "az":
# pour opérer sur toutes les lignes saisies au clavier ou récupérées sur l'entrée standard
# rappel : chaque ligne de l'entrée est stockée dans l'argumement par défaut $_
# appel : cat fichier |cherche-az
while () {
if (/az/) { print $_ ; }
}
# pour opérer sur toutes les lignes d'un fichier
# appel cherche-az
open(IN, "~/essai.txt");
while () {
chomp($_);
if (/az/) { print "$_ \n"; }
}

Les méta-caractères

Appelés aussi caractères spéciaux, ce sont des caractères interprétés en contexte expression rationnelle comme des opérateurs.
En voici la liste avec un bref descriptif :

. (point) représente un caractère qcq, sauf \n
* (astérisque) répétition du caractère précédent
+ au moins une occurence de l'expression régulière
? au plus une occurence de l'expression régulière
[...] (crochets) l'un des caractères de l'ensemble.
[^..] en début de crochets recherche dans le complémentaire de l'ensemble
^ recherche en début de ligne
$ recherche en fin de ligne
\ annule le rôle de méta-caractère, pour jouer le rôle du caractère usuel
{n,m} indique le nombre de répétitions attendus du caractère précédent
| joue le rôle de "ou" entre 2 expr rég.
L'antislash \ inhibe l'interprétation des caractères spéciaux et force leur interprétation usuelle.
Exemples
.\.txt recherche les chaines du genre c.txt , où c est un caractère unique qcq
\*$ recherche les chaines qui se terminent ($) par le caractère astérisque (\*)

Ecriture des motifs


Expression régulière à 1 caractère (atomique)

un caractère correspond à lui-même, en règle générale.
Ainsi le motif c recherche le caractère désigné par c.
un métacaractère précédé de \, pour lui rendre son rôle usuel.
. Le point remplace tout caractère unique, sauf \n (newline)
o a. toute suite de 2 caractères commençant par a, sauf a\n
o b.c désigne toute suite de 3 caractères du genre bac, bbc, bcc,
... * [abc] classe de caractères, sélectionne toute chaine contenant l'un des caractères listés
o [a-z] toute lettre minuscule
o [0-9] équivaut à [0123456789], un chiffre quelconque
o [a-zA-Z0-9\-_] correspond à n'importe quelle lettre ou chiffre, ou au tiret ou au souligné

* le caractère ^ juste après [ joue le rôle d'exclusion des caractères qui suivent.
o [^aeiou] tout sauf une lettre voyelle
o [^a-zA-Z0-9] sélectionne un caractère non alphanumérique

Certaines classes sont prédéfinies et servent d'abréviations
Construction Classe équivalente Construction de négation Classe équivalente
\d (un chiffre) [0-9] \D (chiffres, non !) [^0-9]
\w (1 caractère de mot) [a-zA-Z0-9] \W (mots , non!) [^a-zA-Z0-9]
\s (espace) [ \r \n \f \t] \S (space, non !) [^ \r \n \f \t]

Exemples

  • [\da-fA-F] correspond à un chiffre hexadécimal quelconque
  • 5[0-9][0-9] pour chercher les comptes d'UID 500 à 600.
  • a[bc]d correspond aux chaînes abd ou acd.

    Expression reguliere simple

    Soit expat une expression régulière atomique quelconque, alors ce sont

    expat1expat2expat3 ... toute concaténation sans espace formée d'expr. régulière atomiques
    expat* chaine composée de 0 à N caractères vérifiant expat
    expat+ chaine contenant au moins un caractère vérifiant expat
    expat? chaine contenant au plus un caractère vérifiant expat
    expat{n} chaine composée exactement de n caractères vérifiant expat
    expat{n,} chaine composée d'au moins n caractères vérifiant expat
    expat{n,m} chaine composée de n à m caractères vérifiant expat

    Exemples
    a* caractère de multiplication, suivant un caractère signifie la répétition de 0 à plusieurs exemplaires de ce caractère.
    [ab]* signifie répétition possible d'un quelconque des 2 lettres a ou b.
    a+ répétition de 1 à plusieurs exemplaires de a
    a? 0 ou 1 exemplaire de a
    c[ad]?r impose la présence de cr ou car ou cdr, et rien de plus.
    /x{5,10} 5 à 10 répétitions attendues de x
    a{5,} 5 ou plus répétitions attendues de a
    a{5} exactement 5 occurrences de a
    a.{5}b recherche les mots contenant 5 caractères entre a et b
    \s+ recherche un ou plusieurs caractères séparateurs.
    Conséquence : {0,} {1,} {0,1} correspondent à * , + , ?

    Expression reguliere etendue.

    Soit expsim une expression régulière simple quelconque, comme définie précédemment, alors ce sont des expressions régulières générales :
    expsim1expsim2 ... toute concaténation formée d'expr. régulière simples
    ^expsim recherche le motif expsim en début de chaine
    expsim$ recherche le motif expsim en fin de chaine
    expsim\b le motif expsim doit se trouver la fin d'un mot
    expsim1|expsim2|... alternative : recherche de expsim1 ou expsim2 ...
    (expsim)* chaine composée de 0 à N caractères vérifiant expsim
    (expsim)+ chaine contenant au moins un caractère vérifiant expsim
    (expsim)? chaine contenant au plus un caractère vérifiant expsim
    (expsim){n} chaine contenant la concaténation d'exactement n chaines vérifiant expsim
    (expsim){n,m} chaine composée de n à m caractères vérifiant expsim

    Remarques

    • Les symboles ^, $ sont appelés motifs d'ancrage, car ils permettent de préciser l'endroit où doit être effectuée la recherche du motif dans la chaine (alors que sans directive particulière la recherche de correspondance du motif avec la chaine s'effectue de gauche à droite de la chaine).

    • Le symbole d'ancrage \b indique une limite de mot obligatoire, à l'endroit où il est inséré dans le motif Par exemple : info\b est vérifié par "l'info pour tous", "info-matin" mais pas par infos, informatique ... \binfo est vérifié par "informatique","m'informer" mais pas desinformation, ..

    • Les parenthèses autour de expsim sont indispensables, sinon les opérateurs de répétition s'appliquent au dernier caractère de l'expression (il s'agit d'une question de priorité des opérateurs ..) Par exemple, les motifs li(nux)* et linux* reconnaissent respectivement li, linux, linuxnux,.. et linu, linux, linuxx, linuxxx,...

    • Attention, ces extensions ne sont pas toutes reconnues par l'ensemble des filtres. Par exemple la commande grep, ne connait pas | , ni les parenthèses

    Exemples

    • color|couleur réussit si l'un des motifs, soit color, soit couleur, est trouvé

    • 5[0-9]{2} reconnait tout nombre de 500 à 599.

    • /^(eleve|prof|stage)[3-7]/ est satisfait par les chaines commençant par l'un des 3 mots suivis immédiatement par un numéro de 3 a 7

    • comment reconnaitre un mot de 6 lettres formé des lettres (cela ne vous rappelle rien ?)



    Parenthèses de mémorisation
    La présence de parenthèses permet de mémoriser une ou plusieurs parties de l'expression qu'elle entoure, sans modifier son interprétation. Pour rappeler ces valeurs mémorisées, on utilise les notations \1, \2 ... qui correspondent aux valeurs reconnues de même ordre.
    Ainsi eleve(\d).+poste\1 sera satisfait par eleve3 au poste3 et non par eleve5 au poste3

    Sources de l'article


  •  

    Forum
    Forum d'entraide
    Blog
    Le blog
    News
    Les news du site
    Php/Mysql
    Formulaire en php
    Administrer un serveur Mysql
    Session en php
    Gerer ses bases mysql
    Les bases php
    Securiser ses scripts PHP
    Controler ses programmes avec RATS
    Convertir une base sql en utf8
    Astuces php
    Programmation
    Python rapide
    Tutorial Python
    Tutorial Perl
    Tutorial Perl complet
    Tutoriel ruby
    Tutoriel C
    Introduction à gawk
    Filtres et utilitaires
    Find
    Programmation Shell
    Ecriture de scripts bash
    Expressions regulieres
    Vi
    Introduction a Javascript
    Compiler avec gcc
    Astuces en Bash
    Cracking
    Tutoriel Assembleur
    Guide du cracking pour débutant
    Assembleur
    Manual Unpacking
    Techniques de Protection
    Différentes failles Web
    Arp spoofing dans un réseau switché
    Les intrusions
    Les attaques externes
    Defacage
    Defacage complet
    Buffer overflow
    Netcat
    Injection sql
    Injection sql(suite)
    John the Ripper
    Spoofer un email
    Utiliser google
    La faille system
    Usurper une identité
    Le rooting
    Shellcode sous Unix
    La faille race condition
    La faille xss
    La faille xss (2)
    Attaques sur un routeur
    P2P
    Azureus pas-a-pas
    News
    Lire les news de Linux-pour-lesnuls.com au format RSS
    Distros
    Gestion des paquets debian
    101 commandes debian
    Graphisme
    Effet neon dans GIMP
    Effet vapeur dans GIMP
    Cours fonctionnalités de GIMP
    Humour
    Ensemble
    Divers