Différences entre les versions de « Regexp »

 
(62 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Catégorie:Commandes]]
+
<!-- regexp, expression régulière, expression rationnelle, motif -->
== Description ==
+
Dans le jargon informatique, une expression régulière, ou '''''Regexp''''', est une chaîne de caractères désignant un ensemble de chaînes de caractères respectant une syntaxe particulière. Elle est très utile dans la manipulation de texte, pour rechercher, remplacer ou supprimer des expressions rencontrées fréquemment.
Une expression rationnelle ou expression régulière est en informatique une chaîne de caractères que l’on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise. Elle est très utile dans la manipulation de texte, pour rechercher, remplacer ou supprimer.
+
 
 +
 
 +
__TOC__
 +
 
 +
=== Métacaractères ===
 +
Un métacaractère est un symbole faisant partie d'une expression régulière et qui remplit une fonction précise. Quelques exemples d'application suivent ce tableau.
 +
 
  
== Guide==
 
=== Les méta-caractères ===
 
Ce sont des caractères qui sont interprétés par l'analyseur. Pour que le méta-caractère * ne soit par interprété par l'analyseur, il faut le faire précéder du caractère '\' ou le placer entre '''crochets''' [].
 
 
 
{| class="wikitable"  style="margin: auto; text-align: left;"
 
{| class="wikitable"  style="margin: auto; text-align: left;"
|+Les méta caractères
 
 
|-
 
|-
! Méta-caractères !! Signification
+
! Métacaractères !! Fonction
 
|-
 
|-
 
!?
 
!?
|Opérateur portant sur l'expression précédente : 0 ou une fois l'expression précédente.
+
|0 ou 1 fois l'expression précédente
 
|-
 
|-
 
!*  
 
!*  
|Opérateur portant sur l'expression précédente : 0, 1 ou plusieurs fois l'expression précédente.
+
|0, 1 ou plusieurs fois l'expression précédente
 
|-
 
|-
 
!+  
 
!+  
|Opérateur portant sur l'expression précédente : 1 ou plusieurs fois l'expression précédente.
+
|1 ou plusieurs fois l'expression précédente
 
|-
 
|-
 
!{n}
 
!{n}
|Opérateur portant sur l'expression précédente : n fois exactement l’expression précédente
+
|<tt>n</tt> fois l’expression précédente
 
|-
 
|-
!{n,m}  
+
!{m,n}  
|Opérateur portant sur l'expression précédente : n fois minimum et m fois maximum l’expression précédente  
+
|<tt>m</tt> fois minimum et <tt>n</tt> fois maximum l’expression précédente  
 
|-
 
|-
 
!^  
 
!^  
|Négation ou début de ligne.
+
|Négation ou début de ligne
 
|-
 
|-
 
!$  
 
!$  
|Fin de ligne.
+
|Fin de ligne
 +
|-
 +
![]
 +
|Un ou plusieurs des objets entre crochets doivent être présents
 +
|-
 +
!()
 +
|Tous les objets entre parenthèses doivent être présents
 
|-
 
|-
 
! <nowiki>|</nowiki>  
 
! <nowiki>|</nowiki>  
|Opérateur ou.
+
|Opérateur &laquo;&nbsp;ou&nbsp;&raquo;.
 
|-
 
|-
 
|}
 
|}
  
===Les intervalles de caractères===
 
Un intervalle de caractères peut être défini en écrivant entre [ ] la liste des caractères de cet intervalle.
 
{| class="wikitable"  style="margin: auto; text-align: left;"
 
|+ Les méta caractères
 
|-
 
! Classe !! Signification
 
|-
 
![abc]
 
|La classe des trois caractères a, b et c
 
|-
 
![a-z]
 
|La classe de tous les caractères de a à z.
 
|-
 
![^abc]
 
|La classe de tous les caractères sauf a, b et c.
 
|-
 
![a-zA-Z]
 
|L'union des classes [a-z] et [A-Z].
 
|-
 
|}
 
  
== Exemples==
+
'''N.B.&nbsp;:''' Pour que &laquo;&nbsp;<tt>*</tt>&nbsp;&raquo; ne soit pas interprété comme un métacaractère, il faut plutôt utiliser &laquo;&nbsp;<tt>\*</tt>&nbsp;&raquo;.
 +
 
 +
==== Exemples ====
 +
Dans les exemples ci-dessous, chaque expression régulière est suivie de la chaîne de caractères qu'elle représente.
 +
 
 +
* <tt>abc?</tt>&nbsp;: <tt>ab</tt> ou <tt>abc</tt>.
 +
* <tt>abc*</tt>&nbsp;: <tt>ab</tt>, <tt>abc</tt>, <tt>abcc</tt>, ...
 +
* <tt>abc+</tt>&nbsp;: <tt>abc</tt>, <tt>abcc</tt>, <tt>abccc</tt>, ...
 +
* <tt>abc{2}</tt>&nbsp;: <tt>abcc</tt>.
 +
* <tt>abc{2,}</tt>&nbsp;: <tt>abcc</tt>, <tt>abccc</tt>, ...
 +
* <tt>abc{2,4}</tt>&nbsp;: <tt>abcc</tt>, <tt>abccc</tt>, <tt>abcccc</tt>.
 +
* <tt>^début</tt>&nbsp;: chaîne commençant par &laquo;&nbsp;<tt>début</tt>&nbsp;&raquo;.
 +
* <tt>fin$</tt>&nbsp;: chaîne se terminant par &laquo;&nbsp;<tt>fin</tt>&nbsp;&raquo;.
 +
* <tt>[abc]</tt>&nbsp;: <tt>a</tt>, <tt>b</tt> ou <tt>c</tt>; équivalent à <tt>(a|b|c)</tt>.
 +
* <tt>[a-z]</tt>&nbsp;: une des lettres de [http://fr.wikipedia.org/wiki/Alphabet l'alphabet].
 +
* <tt>[a-zA-Z]</tt>&nbsp;: union de <tt>[a-z]</tt> et <tt>[A-Z]</tt>.
 +
* <tt>a(bc)*</tt>&nbsp;: <tt>a</tt>, <tt>abc</tt>, <tt>abcbc</tt>, ...
 +
* <tt>un|le</tt>&nbsp;: &laquo;&nbsp;<tt>un</tt>&nbsp;&raquo; ou &laquo;&nbsp;<tt>le</tt>&nbsp;&raquo;.
 +
* <tt>(un|le) chien</tt>&nbsp;: &laquo;&nbsp;<tt>un chien</tt>&nbsp;&raquo; ou &laquo;&nbsp;<tt>le chien</tt>&nbsp;&raquo;.
 +
* <tt>^abc+</tt>&nbsp;: <tt>abc</tt>, <tt>abcc</tt>, <tt>abccc</tt>, ...
 +
* <tt>^chaîne$</tt>&nbsp;: chaîne qui commence et se termine par &laquo;&nbsp;<tt>chaîne</tt>&nbsp;&raquo;.
 +
* <tt>(a|b)*</tt>&nbsp;: chaîne contenant une suite de <tt>a</tt> ou de <tt>b</tt>.
 +
* <tt>^.{3}$</tt>&nbsp;: chaîne de 3 caractères exactement.
 +
 
 +
=== Combinaison avec [[La_commande_grep|<tt>grep</tt>]] ===
 +
* Recherche de &laquo;&nbsp;<tt>smu</tt>&nbsp;&raquo; au début de chaque ligne dans <tt>fichier</tt>&nbsp;:
 +
<pre>
 +
grep "^smu" fichier
 +
</pre>
 +
* Retourne les lignes commençant par &laquo;&nbsp;<tt>^s</tt>&nbsp;&raquo; dans <tt>fichier</tt>&nbsp;:
 +
<pre>
 +
grep "\^s" fichier
 +
</pre>
 +
* Affiche les lignes contenant &laquo;&nbsp;<tt>Smu</tt>&nbsp;&raquo; ou &laquo;&nbsp;<tt>smu</tt>&nbsp;&raquo; dans <tt>fichier</tt>&nbsp;:
 +
<pre>
 +
grep "[Ss]mu" fichier
 +
</pre>
 +
* Recherche les lignes vides dans <tt>fichier</tt>&nbsp;:
 +
<pre>
 +
grep "^$" fichier
 +
</pre>
 +
* Recherche les lignes contenant 2 chiffres côte à côte dans <tt>fichier</tt>&nbsp;:
 +
<pre>
 +
grep "[0-9][0-9]" fichier
 +
</pre>
 +
 
 +
=== Recherche de fichiers ===
 +
Pour chercher des fichiers dont le nom satisfait à une expression régulière, il suffit de combiner les commandes [[La_commande_grep|<tt>grep</tt>]] et [[Commandes_élémentaires#ls|<tt>ls</tt>]] à l'aide d'un [[Pipelining_et_redirection|pipeline]] (&laquo;&nbsp;|&nbsp;&raquo;). Par exemple, pour énumérer les fichiers du répertoire courant dont le nom est <tt>abc</tt>, <tt>abcbc</tt>, <tt>abcbcbc</tt>, etc., il suffit d'utiliser la ligne suivante&nbsp;:
 +
<pre>
 +
ls -R | grep -E "a(bc)+"
 +
</pre>
 +
 
 +
== Voir aussi ==
  
"^debut": chaîne qui commence par "debut" <br/>
+
=== Articles connexes ===
"fin$": chaîne qui se termine par "fin" <br/>
 
"^chaîne$": chaîne qui commence et se termine par "chaîne" <br/>
 
"abc": chaîne contenant la chaîne "abc" <br/>
 
"abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) <br/>
 
"abc*": chaîne qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" ...) <br/>
 
"abc?": chaîne qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc") <br/>
 
"^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) <br/>
 
"abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc")<br/>
 
"abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..)<br/>
 
"abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc")<br/>
 
"a(bc)*": chaîne qui contient "a" suivie de zero "bc" ou plus <br/>
 
"un|le": chaîne qui contient "un" ou "le" <br/>
 
"(un|le) chien": chaîne qui contient "un chien" ou "le chien" <br/>
 
"(a|b)*": chaîne qui contient une suite de "a" ou de "b" <br/>
 
"^.{3}$": chaîne qui contient 3 caractères exactement. <br/>
 
"[abc]": chaîne qui contient un "a", un "b", ou un "c". <br/>
 
"[a-z]": chaîne qui contient un caractère compris entre "a" et "z". <br/>
 
"^[a-zA-Z]": chaîne qui commence par une lettre minuscule ou majuscule. <br/>
 
"^[^a-zA-Z]": chaîne qui ne commence pas par une lettre. <br/>
 
"[\+?{}.]": chaîne qui contient un de ces six caractères : \+?{}. <br/>
 
  
=== Avec la commande grep===
+
* [[Commandes_élémentaires|Commandes élémentaires]]
 +
* [[Commandes_élémentaires#ls|<tt>ls</tt>]]
 +
* [[La_commande_grep|<tt>grep</tt>]]
 +
* [[Pipelining_et_redirection|Pipeline]]
 +
* [[La_commande_sed|<tt>sed</tt>]]
  
<pre>grep '^smu' file</pre>cherche 'smu' au début de chaque ligne dans file.<br/><br/>
+
=== Références externes ===
<pre>grep 'smu$' file</pre>cherche 'smu' à la fin de chaque ligne dans file.<br/><br/>
 
<pre>grep '^smu$' file</pre>retourne les lignes contenant seulement et exactement 'smu'.<br/><br/>
 
<pre>grep '\^s' file</pre>retourne les lignes commençant par '^s',car "\" permet de considérer ^ comme un caractère normal et non plus un méta-caractère.<br/><br/>
 
<pre>grep '[Ss]mu' file</pre> affiche les lignes contenant 'Smu' ou 'smu'. <br/><br/>
 
<pre>grep 'B[oO][bB]' file</pre> affiche les lignes contenant BOB, Bob, BOb or BoB. <br/><br/>
 
<pre>grep '^$' file</pre> recherche les lignes vides dans file. <br/><br/>
 
<pre>grep '[0-9][0-9]' file</pre> recherche les lignes contenant 2 chiffres côte à côte. <br/><br/>
 
  
==Voir aussi==
+
* [http://en.wikipedia.org/wiki/Regular_expression ''Regular expression'' sur Wikipedia]

Version actuelle datée du 28 mai 2013 à 10:46

Dans le jargon informatique, une expression régulière, ou Regexp, est une chaîne de caractères désignant un ensemble de chaînes de caractères respectant une syntaxe particulière. Elle est très utile dans la manipulation de texte, pour rechercher, remplacer ou supprimer des expressions rencontrées fréquemment.


Métacaractères

Un métacaractère est un symbole faisant partie d'une expression régulière et qui remplit une fonction précise. Quelques exemples d'application suivent ce tableau.


Métacaractères Fonction
? 0 ou 1 fois l'expression précédente
* 0, 1 ou plusieurs fois l'expression précédente
+ 1 ou plusieurs fois l'expression précédente
{n} n fois l’expression précédente
{m,n} m fois minimum et n fois maximum l’expression précédente
^ Négation ou début de ligne
$ Fin de ligne
[] Un ou plusieurs des objets entre crochets doivent être présents
() Tous les objets entre parenthèses doivent être présents
| Opérateur « ou ».


N.B. : Pour que « * » ne soit pas interprété comme un métacaractère, il faut plutôt utiliser « \* ».

Exemples

Dans les exemples ci-dessous, chaque expression régulière est suivie de la chaîne de caractères qu'elle représente.

  • abc? : ab ou abc.
  • abc* : ab, abc, abcc, ...
  • abc+ : abc, abcc, abccc, ...
  • abc{2} : abcc.
  • abc{2,} : abcc, abccc, ...
  • abc{2,4} : abcc, abccc, abcccc.
  • ^début : chaîne commençant par « début ».
  • fin$ : chaîne se terminant par « fin ».
  • [abc] : a, b ou c; équivalent à (a|b|c).
  • [a-z] : une des lettres de l'alphabet.
  • [a-zA-Z] : union de [a-z] et [A-Z].
  • a(bc)* : a, abc, abcbc, ...
  • un|le : « un » ou « le ».
  • (un|le) chien : « un chien » ou « le chien ».
  • ^abc+ : abc, abcc, abccc, ...
  • ^chaîne$ : chaîne qui commence et se termine par « chaîne ».
  • (a|b)* : chaîne contenant une suite de a ou de b.
  • ^.{3}$ : chaîne de 3 caractères exactement.

Combinaison avec grep

  • Recherche de « smu » au début de chaque ligne dans fichier :
grep "^smu" fichier
  • Retourne les lignes commençant par « ^s » dans fichier :
grep "\^s" fichier
  • Affiche les lignes contenant « Smu » ou « smu » dans fichier :
grep "[Ss]mu" fichier
  • Recherche les lignes vides dans fichier :
grep "^$" fichier
  • Recherche les lignes contenant 2 chiffres côte à côte dans fichier :
grep "[0-9][0-9]" fichier

Recherche de fichiers

Pour chercher des fichiers dont le nom satisfait à une expression régulière, il suffit de combiner les commandes grep et ls à l'aide d'un pipeline (« | »). Par exemple, pour énumérer les fichiers du répertoire courant dont le nom est abc, abcbc, abcbcbc, etc., il suffit d'utiliser la ligne suivante :

ls -R | grep -E "a(bc)+"

Voir aussi

Articles connexes

Références externes


La dernière modification de cette page a été faite le 28 mai 2013 à 10:46.