<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://haypo.alwaysdata.net:443/wiki/skins/common/feed.css?63"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://haypo.alwaysdata.net:443/wiki/index.php?action=history&amp;feed=atom&amp;title=Expressions_rationnelles</id>
		<title>Expressions rationnelles - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="http://haypo.alwaysdata.net:443/wiki/index.php?action=history&amp;feed=atom&amp;title=Expressions_rationnelles"/>
		<link rel="alternate" type="text/html" href="http://haypo.alwaysdata.net:443/wiki/index.php?title=Expressions_rationnelles&amp;action=history"/>
		<updated>2026-04-30T20:14:50Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.10.1</generator>

	<entry>
		<id>http://haypo.alwaysdata.net:443/wiki/index.php?title=Expressions_rationnelles&amp;diff=6336&amp;oldid=prev</id>
		<title>Haypo: /* &quot;Optimiser&quot; ses expressions rationnelles (ou éviter les pièges) */</title>
		<link rel="alternate" type="text/html" href="http://haypo.alwaysdata.net:443/wiki/index.php?title=Expressions_rationnelles&amp;diff=6336&amp;oldid=prev"/>
				<updated>2007-07-18T15:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;&amp;quot;Optimiser&amp;quot; ses expressions rationnelles (ou éviter les pièges)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[CatÃ©gorie:Programmation]]&lt;br /&gt;
&lt;br /&gt;
[[Programmation|Retour aux articles de programmation]]&lt;br /&gt;
&lt;br /&gt;
Les '''expressions rationnelles''', ''expressions rÃ©guliÃ¨res'', ''regexp'', ou encore ''regex'', sont une notation permettant de vÃ©rifier qu'une chaÃ®ne de caractÃ¨re correspond Ã  un motif donnÃ©. On peut s'en servir pour vÃ©rifier que des chaÃ®nes saisies sont valides, pour extraire des informations, ou encore pour remplacer un motif par une nouvelle expression. Il existe de trÃ¨s nombreux programmes permettant d'utiliser les expressions rationnelles (sed, perl, etc.).&lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
* Â« '''[A-Za-z]+''' Â» reconnaÃ®t un mot composÃ© de lettres minuscules ou majuscules (sans lettre accentuÃ©e ou c-cÃ©dille)&lt;br /&gt;
* Â« '''[0-9]{4}''' Â» reconnaÃ®t un nombre de quatre chiffres exactement&lt;br /&gt;
* Â« '''(chien|chat)s?''' Â» reconnaÃ®t chien, chat, chiens ou chats&lt;br /&gt;
&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&lt;br /&gt;
* Â« '''[abc]''' Â» : ReconnaÃ®t un caractÃ¨re parmi un ensemble donnÃ© (ici les lettres a, b et c). On peut spÃ©cifier des suites de caractÃ¨res comme Â« [a-z] Â» pour lettre de a Ã  z. Attention, le caractÃ¨re doit Ãªtre spÃ©cifiÃ© en dernier (Â« [a-z-] Â» par exemple), et le caractÃ¨re Â« ^ Â» doit Ãªtre Ã©chappÃ© (Â« [abc\^] Â»).&lt;br /&gt;
* Â« '''[^abc]''' Â» : ReconnaÃ®t un caractÃ¨re en dehors de l'ensemble spÃ©cifiÃ© (ici, tout sauf les lettres a, b et c). On peut Ã©galement spÃ©cifier des suites.&lt;br /&gt;
* Â« '''a|b|c''' Â» : Ou logique, reconnaÃ®t le motif a, b ou c. Il faut souvent utiliser de parenthÃ¨ses pour bien dÃ©limiter les expressions : Â« Il faut (beau|froid) aujourd'hui Â».&lt;br /&gt;
* Â« '''^''' Â» et Â« '''$''' Â» : Notent, respectivement, le dÃ©but et la fin de la chaÃ®ne (voir souvent le dÃ©but et la fin d'une ligne).&lt;br /&gt;
&lt;br /&gt;
On peut ensuite spÃ©cifier le nombre de rÃ©pÃ©tition d'une expression :&lt;br /&gt;
* Â« '''{n}''' Â» : Exactement n&lt;br /&gt;
* Â« '''{n,}''' Â» : Au moins n&lt;br /&gt;
* Â« '''{n,p}''' Â» : Entre n et p&lt;br /&gt;
* Â« '''?''' Â» : ZÃ©ro ou un&lt;br /&gt;
* Â« '''*''' Â» : ZÃ©ro ou plusieurs&lt;br /&gt;
* Â« '''+''' Â» : Au moins un&lt;br /&gt;
&lt;br /&gt;
== Syntaxe spÃ©cifique Ã  un programme ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Expression !! [[sed]] !! [[vi]] !! grep !! egrep !! [[Configuration d'Emacs|emacs]]&lt;br /&gt;
|-&lt;br /&gt;
| Au moins un || \+ || \+ || \+ || + || +&lt;br /&gt;
|-&lt;br /&gt;
| ZÃ©ro ou un || \? || \? || \? || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| ZÃ©ro ou plusieurs || * || * || * || * || *&lt;br /&gt;
|-&lt;br /&gt;
| DÃ©but / fin de ligne || ^ $ || ^ $ || ^ $  || ^ $ || ^ $&lt;br /&gt;
|-&lt;br /&gt;
| Ensemble || [...] || [...] || [...] || [...] || [...] &lt;br /&gt;
|-&lt;br /&gt;
| Ou logique || &amp;lt;nowiki&amp;gt;a \| b \| c&amp;lt;/nowiki&amp;gt; || &amp;lt;nowiki&amp;gt;a \| b \| c&amp;lt;/nowiki&amp;gt; || &amp;lt;nowiki&amp;gt;a \| b\| c&amp;lt;/nowiki&amp;gt; || &amp;lt;nowiki&amp;gt;a | b | c&amp;lt;/nowiki&amp;gt; || &amp;lt;nowiki&amp;gt;a \| b \| c&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Entre une et trois rÃ©pÃ©titions || \{1,3\} || \{1,3\} || \{1,3\} || {1,3} || {1,3}&lt;br /&gt;
|-&lt;br /&gt;
| Capturer une expression || \(...\) || \(...\) || \(...\) || (...) || \(...\)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Optimiser&amp;quot; ses expressions rationnelles (ou Ã©viter les piÃ¨ges) ==&lt;br /&gt;
&lt;br /&gt;
'''''Voir mon projet [http://hachoir.org/wiki/hachoir-regex hachoir-regex] qui vise Ã  optimiser les regex et gÃ¨re bien plus de cas que ce qui est dÃ©crit ci-dessous'''&lt;br /&gt;
&lt;br /&gt;
Certaines expressions peuvent mettre Ã  genoux n'importe quel moteur d'expressions rationnelles. Exemple :&lt;br /&gt;
 ^(x+|y)*$&lt;br /&gt;
&lt;br /&gt;
Cette expression reconnait, par exemple, les chaÃ®nes suivantes : &amp;quot;&amp;quot;, &amp;quot;x&amp;quot;, &amp;quot;y&amp;quot; ou encore &amp;quot;xxyxx&amp;quot;. Le problÃ¨me est le cas &amp;quot;x+*&amp;quot;, ce qui peut donner &amp;quot;x+++&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
En regardant l'expresion de plus prÃ¨s, on voit qu'en fait le + de x+ est optinnel. Ce qui donne finalement :&lt;br /&gt;
 ^(x|y)*$&lt;br /&gt;
&lt;br /&gt;
De mÃªme, l'expression suivante donne le cas &amp;quot;y*+&amp;quot; plutÃ´t confus :&lt;br /&gt;
 ^(x|y*)+$&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux remplacer l'expression par (euh, je ne suis pas certain de mon coup) :&lt;br /&gt;
 ^(x(x|y)*)?$&lt;br /&gt;
&lt;br /&gt;
Mais attention car le contenu des parenthÃ¨ses n'est pas identique Ã  chaque fois !&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
* [http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Documentation sur les regex dans Java 1.4]&lt;/div&gt;</summary>
		<author><name>Haypo</name></author>	</entry>

	</feed>