<?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>Cyril - Mes astuces &#187; php</title>
	<atom:link href="http://blog.cyril.me/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cyril.me</link>
	<description>Yet Another Wordpress Blog</description>
	<lastBuildDate>Fri, 30 Jul 2010 06:56:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Expressions régulières : combiner match et non-match</title>
		<link>http://blog.cyril.me/2010/06/expressions-regulieres-combiner-match-non-match/</link>
		<comments>http://blog.cyril.me/2010/06/expressions-regulieres-combiner-match-non-match/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 20:12:05 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regexps]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=289</guid>
		<description><![CDATA[Match et non-match&#8230; En cette période de coupe du monde de football 2010, quoi de plus naturel que de parler de match ? &#8230; Hum. Problématique Mon problème aujourd&#8217;hui, c&#8217;est de sélectionner les listes qui contiennent une certaines expression régulière, mais pas une autre. Plus exactement, et pour faire dans les anglicismes, je cherche &#171;&#160;foo.*&#160;&#187;, [...]]]></description>
			<content:encoded><![CDATA[<h3>Match et non-match&#8230;</h3>
<p>En cette période de <a title="Allez les bleus !" href="http://fr.fifa.com/">coupe du monde de football 2010</a>, quoi de plus naturel que de parler de match ? &#8230; Hum.</p>
<h3>Problématique</h3>
<p>Mon problème aujourd&#8217;hui, c&#8217;est de sélectionner les listes qui contiennent une certaines expression régulière, mais pas une autre. Plus exactement, et pour faire dans les anglicismes, je cherche &laquo;&nbsp;foo.*&nbsp;&raquo;, mais pas &laquo;&nbsp;foobar&nbsp;&raquo;.</p>
<h3>La solution</h3>
<p>Il faut utiliser la forme suivante : <code>(?!regexp)</code> pour choisir quelque chose qui ne match pas la <code>regexp</code> en question.</p>
<p>Mon exemple en pratique :</p>
<pre>$ echo -e 'foo\nfoobar\nfoofighting' | grep -P 'foo(?!bar)'
foo
foofighting</pre>
<p>Plus d&#8217;informations disponible avec <a title="Manuel des expressions régulières perl" href="http://perldoc.perl.org/perlre.html">perldoc perlre</a>, en particulier le chapitre sur les expressions régulières étendues (Extended Patterns)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/06/expressions-regulieres-combiner-match-non-match/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expressions régulières : trouver un texte compris entre deux mots</title>
		<link>http://blog.cyril.me/2010/03/expressions-regulieres-regexp-texte-entre-deux-mots/</link>
		<comments>http://blog.cyril.me/2010/03/expressions-regulieres-regexp-texte-entre-deux-mots/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:04:23 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[regexps]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=199</guid>
		<description><![CDATA[Problème Lorsque l&#8217;on parse des fichiers, surtout les fichiers HTML, on a parfois besoin d&#8217;extraire un texte compris entre deux balises. Voici donc un moyen d&#8217;y parvenir avec les expressions régulières. Considérations techniques Je parlerais ici des expressions régulières perl (et par extension : grep -P et preg_* de php). Par défaut, un /.*/ ou [...]]]></description>
			<content:encoded><![CDATA[<h3>Problème</h3>
<p>Lorsque l&#8217;on parse des fichiers, surtout les fichiers HTML, on a parfois besoin d&#8217;extraire un texte compris entre deux balises. Voici donc un moyen d&#8217;y parvenir avec les expressions régulières.</p>
<h3>Considérations techniques</h3>
<p>Je parlerais ici des expressions régulières perl (et par extension : grep -P et preg_* de php).</p>
<p>Par défaut, un <code>/.*/</code> ou toute autre expression sera &laquo;&nbsp;gourmand&nbsp;&raquo; : ça matche tant que ça peut encore matcher. Par exemple, <code>/a*/</code> appliqué à la chaîne <code>"aaa"</code> va matcher <code>"aaa"</code>, et non pas <code>""</code>.</p>
<p>Dans mon cas pratique, j&#8217;ai une balise <code>&lt;td id="identifier"&gt;</code> et j&#8217;en cherche le contenu. Donc si la regexp utilisée est <code>/&lt;td id="identifier"&gt;(.*)&lt;\/td&gt;/</code> alors je vais matcher ce qu&#8217;il y a entre mon td ouvrant, et <strong>le dernier td fermant</strong>.</p>
<h3>La solution</h3>
<p>La solution consiste à dire au moteur d&#8217;expression régulière de prendre le moins possible, et ça se code comme suit : <code>/&lt;td id="identifier"&gt;(.*<strong>?</strong>)&lt;\/td&gt;/</code>.</p>
<p>Bibliographie : <a title="Regexp : match string between two words" href="http://social.msdn.microsoft.com/Forums/en-US/regexp/thread/ab975ba5-31dd-4e6d-b72f-5cd6bf374b02">http://social.msdn.microsoft.com/Forums/en-US/regexp/thread/ab975ba5-31dd-4e6d-b72f-5cd6bf374b02</a> (et oui, parfois on trouve des choses utiles sur les forums de microsoft).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/03/expressions-regulieres-regexp-texte-entre-deux-mots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fonction round() et erreurs d&#8217;arrondis</title>
		<link>http://blog.cyril.me/2009/05/fonction-round-erreurs-arrondis-php-perl/</link>
		<comments>http://blog.cyril.me/2009/05/fonction-round-erreurs-arrondis-php-perl/#comments</comments>
		<pubDate>Tue, 26 May 2009 14:04:02 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[perl]]></category>
		<category><![CDATA[tout et rien]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=109</guid>
		<description><![CDATA[Les arrondis peuvent parfois réserver des surprises. En PHP, la fonction round() et sprintf renvoie parfois des résultats différents.]]></description>
			<content:encoded><![CDATA[<p>Les arrondis peuvent parfois réserver des surprises. Regardez par exemple le code suivant :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span> = <span class="nu0">0</span>; <span class="re0">$i</span> &lt;= <span class="nu0">1</span>; <span class="re0">$i</span> += <span class="nu0">0.05</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a> <span class="br0">&#40;</span><span class="st0">&quot;%.2f %.1f %.1f<span class="es0">\n</span>&quot;</span>, <span class="re0">$i</span>, <span class="re0">$i</span>, <a href="http://www.php.net/round"><span class="kw3">round</span></a><span class="br0">&#40;</span><span class="re0">$i</span>, <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Ce qui nous donne :</p>
<pre>0.00 0.0 0.0
0.05 0.1 0.1
0.10 0.1 0.1
0.15 0.2 0.2
0.20 0.2 0.2
<strong>0.25 0.2 0.3</strong>
0.30 0.3 0.3
<strong>0.35 0.3 0.4</strong>
0.40 0.4 0.4
<strong>0.45 0.4 0.5</strong>
0.50 0.5 0.5
<strong>0.55 0.5 0.6</strong>
0.60 0.6 0.6
0.65 0.7 0.7
0.70 0.7 0.7
0.75 0.8 0.8
0.80 0.8 0.8
0.85 0.9 0.9
0.90 0.9 0.9
0.95 1.0 1.0</pre>
<p>Les deux résultats sont différents !</p>
<p>L&#8217;explication, vous la trouverez dans la documentation de perl (<code>perldoc -q round</code>) :</p>
<p><em>Don&#8217;t blame Perl.  It&#8217;s the same as in C.  IEEE says we have to do this.  Perl numbers whose absolute values are integers under 2**31 (on 32 bit machines) will work pretty much like mathematical integers.  Other numbers are not guaranteed.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2009/05/fonction-round-erreurs-arrondis-php-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
