<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Attitude&#187; Perl</title>
	<atom:link href="http://linux-attitude.fr/tag/perl/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Fri, 17 Feb 2012 08:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Perle fraîche</title>
		<link>http://linux-attitude.fr/post/perle-fraiche?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=perle-fraiche</link>
		<comments>http://linux-attitude.fr/post/perle-fraiche#comments</comments>
		<pubDate>Wed, 10 Nov 2010 17:00:45 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1084</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: "Perl moderne" La vie des huîtres selon saint Larry (soûlant ...). Aujourd'hui il est sujet d'un livre. Un livre dont le titre est "Perl moderne", tout simplement. Je ne vais pas vous le cacher, si je vous en parle c'est que je connais un des auteurs. Remarquez que c'est peut-être l'occasion de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: <a href="http://perlmoderne.fr/">"Perl moderne"</a></p>


<p>La vie des huîtres selon saint Larry (soûlant ...).</p>

<a href="http://www.amazon.fr/gp/product/2744024198?ie=UTF8&tag=linuatti-21&linkCode=as2&camp=1642&creative=6746&creativeASIN=2744024198"><img border="0" src="http://ecx.images-amazon.com/images/I/51bXPAFlDuL._SL500_AA300_.jpg"></a><img src="http://www.assoc-amazon.fr/e/ir?t=linuatti-21&l=as2&o=8&a=2744024198" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />



<p>Aujourd'hui il est sujet d'un livre. Un livre dont le titre est "Perl moderne", tout simplement. Je ne vais pas vous le cacher, si je vous en parle c'est que je connais un des auteurs. Remarquez que c'est peut-être l'occasion de commencer une section recommandations de bouquins.</p>


<h3>L'acheter ou pas&nbsp;?</h3>

<p>Alors pourquoi acheter ce livre&nbsp;? Pour les arguments commerciaux, je vous laisse aller voir le site de l'éditeur. Pour les vraies raisons ...</p>
<ul>
<li>parce qu'il fait 450 pages et que c'est beaucoup</li>
<li>parce qu'il est assez petit pour tenir dans la poche (enfin avec un bon treillis)</li>
<li>parce que comme moi vous avez appris Perl en lisant du code Perl</li>
<li>parce que vous ne savez pas qu'il est possible d'écrire du Perl orienté objet</li>
</ul>

<p>Mais pourquoi je vous déconseillerais d'acheter ce livre&nbsp;?</p>
<ul>
<li>parce que vous aimez Python et que vous voulez considérer les espaces de fin de ligne comme des erreurs de code</li>
<li>parce que pour vous le seul code lisible c'est du code C façon K&amp;R</li>
<li>parce que vous êtes Larry Wall et que vous n'allez rien apprendre</li>
</ul>

<h3>Le contenu du livre</h3>


<p>La première partie ravira les débutants en Perl qui apprendront que contrairement à la croyance populaire "$^£¨%*" n'est pas un code Perl valide. Remarquez que même moi, qui sais que "Perl '-sp0777i&lt;X+d*lMLa^*lN%0]dsXx++lMlN/dsM0&lt;j]dsj'" est une ligne de commande valide en Perl, j'y ai appris des choses.</p>


<p>Hé oui, le Perl a bien évolué depuis la première version 5. La partie 2 m'a d'ailleurs appris qu'il y avait une nouvelle façon d'écrire de l'objet en Perl. Moi bêtement je pensais que Perl avait fait les choses super bien en n'ajoutant qu'un mot clé "bless" pour devenir orienté objet. Mais en fait non, il paraît qu'il en faut un peu plus pour entrer proprement dans le paradigme objet. Qu'a cela ne tienne, on utilisera Moose, l'héritage, des setter, des getter et du typage.</p>


<p>Ça vous parait compliqué&nbsp;? Mais pas du tout le livre contient des exemples simple pour chaque mot clé présenté.</p>


<p>Pour résumer cette partie, ce que j'ai découvert de plus utile ce sont les trigger sur propriétés d'un objets et les méthodes pour intercepter d'autres méthodes.</p>


<p>La troisième partie assez classique avec ce qu'on peut trouver dans les bibliothèque Perl pour traiter les données. Elle parle entre autre de l'infernal problème des dates ...</p>


<p>Passons à un chapitre bien plus passionnant pour qui s'y connaît déjà un peu en Perl, POE. Intuitivement j'aurais dit quelque chose comme "Perl orienté évènement", perdu, il s'agit de "Perl Object Environment". En fait c'est un système puissant de gestion d'évènements et d'états. Le but étant de passer à une programmation événementielle. C'est très pratique lorsque vous codez un serveur, d'autant qu'il existe déjà un grand nombre de méthodes existantes qui vous éviteront de réinventer la roue (la POE::Wheel pour ceux qui connaissent).</p>


<p>Enfin la dernière partie traite d'une chose qui sera bien plus utile à ceux qui ne connaissent pas encore bien Perl, le framework web de Perl. Il permet de parser du HTML, de lire des formulaires, de jouer des séquence complètes de requêtes pour vous faire passer pour un navigateur auprès de votre serveur préféré (pensez-y vous qui devez remplir toutes les semaines le même formulaire dans votre boite ...).</p>


<p>Pour conclure, je dirais que c'est un bon bouquin. <del>Dommage qu'il n'y ait pas un petit site depuis lequel on puisse faire copier/coller des exemples du livre. Heureusement, ils sont assez courts en général.</del> Il y a maintenant un <a href="http://perlmoderne.fr/" hreflang="fr">site dédié à ce livre</a> et les exemple y sont disponibles au téléchargement</p>

<a href="http://www.amazon.fr/gp/product/2744024198?ie=UTF8&tag=linuatti-21&linkCode=as2&camp=1642&creative=6746&creativeASIN=2744024198"><img border="0" src="http://ecx.images-amazon.com/images/I/51bXPAFlDuL._SL500_AA300_.jpg"></a><img src="http://www.assoc-amazon.fr/e/ir?t=linuatti-21&l=as2&o=8&a=2744024198" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />



<p>Allez, soyez gentil, achetez-le, si vous en prenez 2000, je vous promet de faire un article par jour&nbsp;!</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/usrbingcc-bis' rel='bookmark' title='Permanent Link: #!/usr/bin/gcc (bis)'>#!/usr/bin/gcc (bis)</a></li>
<li><a href='http://linux-attitude.fr/post/le-perl-completement-inutile' rel='bookmark' title='Permanent Link: Le perl complètement inutile'>Le perl complètement inutile</a></li>
<li><a href='http://linux-attitude.fr/post/perles' rel='bookmark' title='Permanent Link: Perles'>Perles</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/perl" title="Perl" rel="tag">Perl</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/perle-fraiche/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Expression régulière</title>
		<link>http://linux-attitude.fr/post/expression-reguliere?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=expression-reguliere</link>
		<comments>http://linux-attitude.fr/post/expression-reguliere#comments</comments>
		<pubDate>Thu, 07 Oct 2010 17:02:43 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1038</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: test d'expression régulière Vous essayez de développer une expression régulière mais vous ne savez pas pourquoi ça ne marche pas&#160;? Tester une expression Je vous propose le petit programme suivant qui vous aidera dans la compréhension du fonctionnement de votre regex. Son usage est simple&#160;: ./regtest.pl &#60;regex&#62; &#60;chaine&#62; Exemple&#160;: ./regtest.pl "(\d+7)\.1\." "127.127.1.12" [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: test d'expression régulière</p>


<p>Vous essayez de développer une expression régulière mais vous ne savez pas pourquoi ça ne marche pas&nbsp;?</p>


<h3>Tester une expression</h3>

<p>Je vous propose le petit <a href="http://linux-attitude.fr/public/Code/regtest.pl">programme suivant</a> qui vous aidera dans la compréhension du fonctionnement de votre regex. Son usage est simple&nbsp;:</p>
<pre>
./regtest.pl &lt;regex&gt; &lt;chaine&gt;
</pre>


<p>Exemple&nbsp;:</p>
<pre>
./regtest.pl "(\d+7)\.1\." "127.127.1.12"
<span style="color: #F00">127</span>.127.1.12 : \d+
<span style="color: #F00">127</span>.127.1.12 : \d+7
<span style="color: #F00">127</span>.127.1.12 : (\d+7)
127.<span style="color: #F00">127.1.</span>12 : (\d+7)\.1\.
    127      : $1
</pre>



<p>Le programme découpe l'expression en éléments syntaxiquement  corrects et les applique à la chaine pour voir ce qui matche et le met en évidence. A la fin la liste des groupes qui ont matchés est affiché.</p>


<p>Il est aussi possible de remplacer une des paramètres (la chaine ou la regex) par un '-'. Le programme boucle alors sur l'entrée et vous permet d'entrer une ligne à chaque fois. Vous pouvez donc faire un test en continu. L'avantage et surtout pour les regexp, cela permet de s'affranchir des caractères spéciaux qui pourraient être interprétés par le shell.</p>


<p>Notez que vous aurez besoin de Regexp::Parser qui n'est pas installé par défaut.
<span id="more-1038"></span>
Pour cela le plus simple est de se connecter en root puis de faire</p>
<pre>
$ perl -e shell -MCPAN
install Regexp::Parser
</pre>


<p>Et oula, maintenant plus de problème, vous pouvez tester vos expression régulières facilement&nbsp;!</p>


<h3>Comment ca marche&nbsp;?</h3>

<p>En écrivant ce petit programme, voici quelques petites astuces que j'ai utilisé.</p>


<p>Écrire en couleur dans le terminal de façon portable&nbsp;:</p>
<pre>
use Term::ANSIColor;
print colored(&quot;string&quot;, 'red');
</pre>


<p>Parser une expression régulière perl dans une structure lisible (arbre)&nbsp;:</p>
<pre>
use Regexp::Parser;
my $parser = Regexp::Parser-&gt;new;
$parser-&gt;parse($reg);
</pre>


<p>Récupérer 3 parties d'une chaine lors d'un matching&nbsp;:</p>
<ul>
<li>$`&nbsp;: avant le match</li>
<li>$&amp;&nbsp;: tout le match</li>
<li>$'&nbsp;: après le mach</li>
</ul>

<p>Récupérer les position des éléments matchés et des groupes dans la chaine en question&nbsp;:</p>
<ul>
<li>@-&nbsp;: tableau des positions de début de chaque groupe</li>
<li>@+&nbsp;: tableau des positions de fin de chaque groupe</li>
</ul>

<p><a href="http://linux-attitude.fr/public/Code/regtest.pl">Vous trouverez le code ici</a>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/en-vrac-14' rel='bookmark' title='Permanent Link: En vrac (14)'>En vrac (14)</a></li>
<li><a href='http://linux-attitude.fr/post/soyez-reguliers-1' rel='bookmark' title='Permanent Link: Soyez réguliers (1)'>Soyez réguliers (1)</a></li>
<li><a href='http://linux-attitude.fr/post/lignes-de-commande-en-sed' rel='bookmark' title='Permanent Link: Lignes de commande en sed'>Lignes de commande en sed</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</a>, <a href="http://linux-attitude.fr/tag/perl" title="Perl" rel="tag">Perl</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/scripting" title="Scripting" rel="tag">Scripting</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/expression-reguliere/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Soyez régulier (2)</title>
		<link>http://linux-attitude.fr/post/soyez-regulier-2?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=soyez-regulier-2</link>
		<comments>http://linux-attitude.fr/post/soyez-regulier-2#comments</comments>
		<pubDate>Wed, 25 Feb 2009 18:29:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/soyez-regulier-2</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: perlre Suite à l'article précédent, qui posait les bases des expressions régulières, vous êtes probablement resté sur votre faim. Voici quelques astuces permettant d'élever le niveau et de faire des expressions mieux construites, plus rapides, plus courtes ... Traitement des lignes Fonctionnalités que tous les outils ne proposent pas, mais qui sont [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: perlre</p>


<p>Suite à l'article précédent, qui posait les bases des expressions régulières, vous êtes probablement resté sur votre faim. Voici quelques astuces permettant d'élever le niveau et de faire des expressions mieux construites, plus rapides, plus courtes ...</p>


<h3>Traitement des lignes</h3>

<p>Fonctionnalités que tous les outils ne proposent pas, mais qui sont inclues dans le langage PCRE, /m et /s sont des modificateurs comme dans 's/toto/tata/m'.</p>


<p>Il faut bien distinguer les 2 qui portent assez facilement à confusion. De plus les 2 peuvent être utilisées en même temps.</p>

<ul>
<li><strong>/m</strong> est utilisé pour changer la syntaxe de '^' et '$' qui <strong>habituellement</strong> matchent le début et la fin de la <strong>chaîne</strong>, avec /m ils matcheront le début et la fin de <strong>chaque ligne</strong>.</li>
<li><strong>/s</strong> est utilisé pour changer la syntaxe de '.' qui <strong>habituellement</strong> matche n'importe quel caractère <strong>sauf le changement de ligne</strong>, avec /s il matchera n'importe quel caractère <strong>y compris le changement de ligne</strong></li>
</ul>

<p>Ces modificateurs ne font la différence que lorsqu'on veut toucher aux caractères de retour à la ligne et plus généralement, lorsqu'on manipule des chaînes de caractère multilignes.</p>


<h3>Gloutonnerie</h3>

<p>L'algorithme de matching est glouton par défaut, ce qui veut dire que l'expression suivante&nbsp;:</p>
<pre>
/(.*):/
</pre>

<p>Marchera tous les éléments qui se trouvent avant le dernier ':' dans</p>
<pre>
root:x:0:0:root:/root:/bin/bash
</pre>


<p>On peut désactiver la gloutonnerie (greediness) en utilisant&nbsp;? :</p>
<pre>
/(.*?):/
</pre>

<p>Qui du coup ne matchera plus que le premier élément.</p>


<p><span id="more-303"></span></p>


<h3>Backreference</h3>

<p>Il est possible de référencer un élément capturé à l'intérieur d'une expression régulière, ce qui permet de détecter les répétitions.</p>


<p>Exemple pour matcher le début et la fin d'une balise html.</p>
<pre>
/&lt;(\w+)&gt;.*?&lt;/\1&gt;/
</pre>



<h3>Extensions</h3>

<p>Un certain nombre d'extensions d'expressions régulières ont été définies et commencent par '(?' on les utilise peu, mais elles sont très pratiques pour optimiser (en complexité comme en vitesse) des expressions régulières.</p>


<h4>Match sans capture</h4>
<pre>
(?:regex)
</pre>

<p>Permet de matcher sans capturer le contenu dans une variable. Pratique pour éviter la complexité liée à la numérotation des parenthèses imbriquées</p>


<h4>Lookahead et lookbehind</h4>

<p>Il est possible de matcher des éléments "s'ils sont suivis de" (ou "précédés", ou "ne sont pas"). Ceci permet d'écrire des expressions correspondant beaucoup mieux à la description</p>

<pre>qu'on en fait, et parfois même d'écrire ce qui était impossible.</pre>
<pre>
# matche &quot;very funny&quot; et &quot;not boring&quot; mais pas &quot;not funny&quot;
/(\w+ )((?&lt;!not )funny|boring)/
</pre>


<h4>Modificateur inline</h4>

<p>Il es possible de changer un modificateur temporairement, par exemple pour rendre le matching insensible à la casse sur un seul mot&nbsp;:</p>
<pre>
# seul toto peut être écrit indifféremment avec des majuscules et des minuscules
/Bonjour (?i)toto(?-i) la moule/
</pre>


<h3>Encore plus</h3>

<p>Vous voulez encore plus de fonctionnalités&nbsp;? Perl 5.10 apporte son lot de nouveautés dans les expressions régulières. Celles sont-ci sont aussi disponibles dans PCRE pour la plupart puisqu'elles en sont inspirées.</p>


<p>Je ne vais pas vous réécrire <a href="http://articles.mongueurs.net/magazines/linuxmag106.html" hreflang="fr">cet article</a> très bien fait sur le sujet. Ces nouveautés seront surtout utiles pour les utilisateurs avancés.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/soyez-reguliers-1' rel='bookmark' title='Permanent Link: Soyez réguliers (1)'>Soyez réguliers (1)</a></li>
<li><a href='http://linux-attitude.fr/post/un-seul-langage-pour-les-scripts' rel='bookmark' title='Permanent Link: Un seul langage pour les scripts'>Un seul langage pour les scripts</a></li>
<li><a href='http://linux-attitude.fr/post/soyez-fute-avec-vos-disques' rel='bookmark' title='Permanent Link: Soyez futé avec vos disques'>Soyez futé avec vos disques</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/perl" title="Perl" rel="tag">Perl</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/soyez-regulier-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soyez réguliers (1)</title>
		<link>http://linux-attitude.fr/post/soyez-reguliers-1?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=soyez-reguliers-1</link>
		<comments>http://linux-attitude.fr/post/soyez-reguliers-1#comments</comments>
		<pubDate>Mon, 23 Feb 2009 18:24:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/soyez-reguliers-1</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: perl -pe 's///' Il arrive régulièrement d'avoir à développer des expressions régulières. Si on excepte grep et sed, la plupart des outils utilisant des expressions régulières sont compatibles perl (en utilisant PCRE). C'est donc un bon point. Apprendre les expression régulières (qu'on peut considérer comme un langage à part entière) ne sera [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: perl -pe 's///'</p>


<p>Il arrive régulièrement d'avoir à développer des expressions régulières. Si on excepte grep et sed, la plupart des outils utilisant des expressions régulières sont compatibles perl (en utilisant <a href="http://www.pcre.org/" hreflang="en">PCRE</a>).
C'est donc un bon point. Apprendre les expression régulières (qu'on peut considérer comme un langage à part entière) ne sera pas perdu même si on change d'outil ou de langage.</p>


<h3>Tests</h3>


<p>Avant de développer une expression régulière, je vous propose de vous familiariser avec le test de ces expressions. Si vous avec une ligne de commande c'est tout simple, hop un test ligne par ligne&nbsp;:</p>
<pre>
$ perl -pe 's/expression/########/'
données
a matcher, 
autant que vous voulez
&lt;ctrl-d&gt;
</pre>


<p>Mais si vous préférez un interface plus évoluée&nbsp;: voici un des nombreux qui permettent de tester vos expressions en direct <a href="http://myregexp.com/" title="http://myregexp.com/">http://myregexp.com/</a> et avec coloration des éléments matchés.</p>


<h3>Syntaxe de base</h3>


<p>Une expression régulière, c'est une chaîne de caractère qui a pour but de repérer des informations dans un texte. Elles sont en général implémentées sous forme d'<a href="http://fastnet.univ-brest.fr/~gire/COURS/COMPIL_IUP/node202.html" hreflang="fr">automates à état finis</a>. Cette méthode est extrêmement efficace et dans la plupart des cas il est très difficile de faire plus rapide.</p>


<p>Cette chaîne peut être utilisée pour chercher des informations dans un texte, mais aussi pour faire des remplacements automatisés. Perl utilise une syntaxe <strong>autour</strong> des expressions régulières pour préciser comment les utiliser. Celle-ci est souvent reprise par les utilisateurs des PCRE mais ca n'a rien d'obligatoire&nbsp;:</p>

<ul>
<li><strong>/expression/</strong>&nbsp;:  pour faire des recherches</li>
<li><strong>s/expression/remplacement/</strong> pour faire du recherche/remplacer</li>
<li><strong>y/expression/remplacement/</strong> pour faire des substitutions de caractères</li>
</ul>

<p>y/// est un cas particulier que nous ignorerons.</p>


<p><span id="more-300"></span></p>


<p>Chacune de ces chaînes peut être suivie par un modificateur. Le plus utile est /i qui permet de ne pas se soucier de la <a href="http://fr.wikipedia.org/wiki/Caract%C3%A8re_(typographie)" hreflang="en">casse</a>. Exemple&nbsp;: /toto/i matchera ToTo.
Le deuxième plus important est /g qui permet de faire le remplacement autant de fois que c'est possible et non pas seulement la première fois que l'expression matche.</p>


<p>Attention, hors perl, il se peut que tout ceci ne soit pas valable, mais cela ne change rien quant à la syntaxe des expressions expliquée ci après.</p>


<h3>Syntaxe des expressions</h3>


<p>Le principe d'une expression régulière (abrégé en regex) est de matcher des milliers de possibilités sans devoir toutes les écrire. Il ne s'agit donc (quasiment) que de "raccourcis".</p>


<p>Donc commençons par les non-raccourcis&nbsp;:</p>
<ul>
<li><strong>()</strong>&nbsp;: les parenthèses ont deux fonctions, grouper des éléments entre eux et mémoriser le contenu matché pour le rendre réutilisable par la suite</li>
<li><strong>|</strong>&nbsp;: opérateur OU comme dans "confiture ou nutella ?"</li>
</ul>

<p><strong>Exemples</strong>&nbsp;:</p>
<pre>
^vive (la confiture|le nutella)$
</pre>


<p>Maintenant les raccourcis&nbsp;:</p>
<ul>
<li><strong>.</strong>&nbsp;: n'importe quel caractère</li>
<li><strong>^ $</strong>&nbsp;: début et fin de <strong>chaîne</strong></li>
<li><strong>[abf]</strong>&nbsp;: a ou b ou f</li>
<li><strong>[a-m]</strong>&nbsp;: a ou b ou ... ou m</li>
<li><strong>[^a b]</strong>&nbsp;: tout sauf a ou espace ou b</li>
<li><strong>\d</strong>&nbsp;: un chiffre</li>
<li><strong>\w</strong>&nbsp;: un caractère alphanumérique</li>
<li><strong>\W</strong>&nbsp;: un caractère non alphanumérique</li>
<li><strong>\s</strong>&nbsp;: un caractère d'espacement</li>
<li><strong>\S</strong>&nbsp;: un caractère de non-espacement</li>
<li><strong>a?</strong>&nbsp;: 0 ou 1 fois a</li>
<li><strong>b+</strong>&nbsp;: 1 ou plus fois b</li>
<li><strong>c*</strong>&nbsp;: 0 ou plus fois c</li>
<li><strong>d{3}</strong>&nbsp;: 3 fois d</li>
<li>...</li>
</ul>

<p>Il y en a plein d'autres, mais avec celles-ci vous saurez vous débrouiller dans la plupart des situations.</p>


<p>Exemples&nbsp;:</p>
<pre>
# récupérer le hostname d'un nom de domaine dans $1
(\w+)(\.\w+)*
# récupérer une heure/minute/seconde en début de ligne dans $1, $2 et $3
^(\d\d):(\d\d):(\d\d)\s
# matche une ligne variable=&quot;valeur&quot; avec ou sans guillemets et des espaces autorisés
^\s*(\w+)\s*=\s*&quot;?(.*)&quot;?
</pre>



<p>Après cette petite initiation sans conséquences, vous pouvez aller lire la vraie documentation fournie en manpage avec la documentation perl <a href="http://perldoc.perl.org/perlre.html" hreflang="en">man perlre</a>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/soyez-regulier-2' rel='bookmark' title='Permanent Link: Soyez régulier (2)'>Soyez régulier (2)</a></li>
<li><a href='http://linux-attitude.fr/post/un-seul-langage-pour-les-scripts' rel='bookmark' title='Permanent Link: Un seul langage pour les scripts'>Un seul langage pour les scripts</a></li>
<li><a href='http://linux-attitude.fr/post/trucs-et-astuces-3' rel='bookmark' title='Permanent Link: Trucs et astuces (3)'>Trucs et astuces (3)</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/perl" title="Perl" rel="tag">Perl</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/soyez-reguliers-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perles</title>
		<link>http://linux-attitude.fr/post/perles?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=perles</link>
		<comments>http://linux-attitude.fr/post/perles#comments</comments>
		<pubDate>Mon, 08 Dec 2008 23:03:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/perles</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: perl Quelques trucs et astuces de perlistes en vrac. Pour des vrais astuces de pro régulières, n'hésitez pas à visiter le site des moines de perl. Initialiser un tableau de chaînes sans avec une syntaxe légère, très lisible quand on n'a que des mots, le séparateur étant les caractères blancs, incluant le [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: perl</p>


<p>Quelques trucs et astuces de perlistes en vrac. Pour des vrais astuces de pro régulières, n'hésitez pas à visiter le site des <a href="http://www.perlmonks.org/" hreflang="en">moines</a> de perl.</p>


<p>Initialiser un tableau de chaînes sans avec une syntaxe légère, très lisible quand on n'a que des mots, le séparateur étant les caractères blancs, incluant le retour à la ligne&nbsp;:</p>
<pre>
@tableau = qw( mot1 mot2 mot3 );
</pre>


<p>Passer du mode script de quelques lignes au mode développement long. Cela vous oblige à déclarer et initialiser toutes vos variables entre autre&nbsp;:</p>
<pre>
use strict;
</pre>


<p>Le debug facile&nbsp;:</p>
<pre>
use Data::Dumper;
# variable peut être n'importe quoi, toutes les sous-sous parties sont écrites :
print Dumper($variable,\@variable);
print Dumper(\%variable);
</pre>


<p>L'aide en ligne facile, ça fait tout de suite classe dans un script (<a href="http://perldoc.perl.org/perlpod.html" hreflang="en">format</a>)&nbsp;:</p>
<pre>
use Pod::Usage;
# imprime le contenu de SYNOPSIS et termine le programme avec un code d'erreur 1
pod2usage(1);
# attention, pod est chatouilleux sur les retours à la ligne avant et après les =

=head1 SYNOPSIS

commande  [-o|--option=&lt;valeur&gt;]

=cut
</pre>


<p>La page de manuel facile (pas seulement le SYNOPSIS comme précédemment)&nbsp;:</p>
<pre>
# où fichier.pl est le code précédent
$ pod2man fichier.pl &gt; fichier.1
$ man ./fichier.1
</pre>


<p>Et le dernier pour la route, le parsing d'options facile, très classe, surtout en combinaison avec pod2usage (<a href="http://perldoc.perl.org/Getopt/Long.html#Summary-of-Option-Specifications" hreflang="en">format</a>)&nbsp;:</p>
<pre>
use Getopt::Long;
my $options = {
        option =&gt; 'defaut'
};
GetOptions( $options, qw(
        option|o=s
));
</pre>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/un-seul-langage-pour-les-scripts' rel='bookmark' title='Permanent Link: Un seul langage pour les scripts'>Un seul langage pour les scripts</a></li>
<li><a href='http://linux-attitude.fr/post/expression-reguliere' rel='bookmark' title='Permanent Link: Expression régulière'>Expression régulière</a></li>
<li><a href='http://linux-attitude.fr/post/le-perl-completement-inutile' rel='bookmark' title='Permanent Link: Le perl complètement inutile'>Le perl complètement inutile</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/code" title="Code" rel="tag">Code</a>, <a href="http://linux-attitude.fr/tag/perl" title="Perl" rel="tag">Perl</a>, <a href="http://linux-attitude.fr/tag/scripting" title="Scripting" rel="tag">Scripting</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/perles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching 18/51 queries in 0.176 seconds using apc
Object Caching 1369/1390 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-05-23 20:20:36 -->
