<?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>Espacio de Dario Quintana &#187; regex</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/regex/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darioquintana.com.ar</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 22:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Expresiones Regulares en .Net</title>
		<link>http://blog.darioquintana.com.ar/2006/03/28/expresiones-regulares-en-net/</link>
		<comments>http://blog.darioquintana.com.ar/2006/03/28/expresiones-regulares-en-net/#comments</comments>
		<pubDate>Tue, 28 Mar 2006 00:10:00 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[expresiones regulares]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/?p=29</guid>
		<description><![CDATA[<p>Intentando desarrollar un parser, ya que veremos que parseamos es imposible no caer en este tema de expresiones regulares, a menos de que nos fabriquemos una rutina que caracter a caracter vaya leyendo, almacenando en un buffer y comprobando si es lo que estamos buscando, podría ser una opción si es algo sencillo, pero&#8230;hgggssss.</p> <p>O [...]]]></description>
			<content:encoded><![CDATA[<p>Intentando desarrollar un parser, ya que veremos que parseamos <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   es imposible no caer en este tema de expresiones regulares, a menos de que nos fabriquemos una rutina que caracter a caracter vaya leyendo, almacenando en un buffer y comprobando si es lo que estamos buscando, podría ser una opción si es algo sencillo, pero&#8230;hgggssss.</p>
<p>O podemos ser los programadores duros y construirnos nuestra propia maquina de estados y con ella procesar las expresiones.Para los que no saben, o alguno que haya cursado conmigo Sintaxis y Semantica del Lenguaje y no se acuerda de los que nos hablaba el profe Bernal cuando nos hacía hacer la máquina de estados de una expresión regular dada, como aabbcc <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  y ver como corrían las letras de un estado al otro, pero bueno&#8230;supongo que ese fue el lado oscuro de las Regex <img src='http://blog.darioquintana.com.ar/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Una definición semi-formal: Una expresión regular es una cadena que describe o &#8220;matchea&#8221; a un conjunto de cadenas,  dado un conjunto de reglas de sintaxis. En sintesis, es una cadena que representa a un patron que se busca en un texto. Un ejemplo más palpable, que por cierto los usamos a menudo, cuando queremos copiar archivos a un directorio: #cp *.cs /home/dario. Estamos aplicando el concepto. Esto en castellano seria como copiar todos los archivos (*)  que tengan la extensión &#8216;cs&#8217; a el directorio /home/dario. Es simple.</p>
<p>&nbsp;</p>
<p>Las expresiones regulares funcionan de una manera similar. Tienen un conjunto finito de simbolos para la representación de caracteres, numeros, y como tambien simbolos para indicar cardinalidad.</p>
<p>Vayamos a un ejemplo: todos sabemos que una dirección IP se asemeja a: 10.66.43.141. Es decir, [numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos]</p>
<p>Que mejor ejemplo para aplicar expresiones regulares. Aunque las diferencias se den, dependiendo del lenguaje que estamos trabajando, las expresiones regulares no varían mucho de una implementación a la otra. Por lo general todas las implementaciones se parecen bastante a la manera que lo hace <a href="http://en.wikipedia.org/wiki/Perl">Perl</a>, cuyo motor de expresiones regulares es muy potente, mejor dicho, cuando te nombran Perl, lo primero que se me viene a la cabeza es RegEx, que ha tenido su inspiración en <a href="http://en.wikipedia.org/wiki/Sed">sed.</a>Si programás en .Net y querés usar RegExs, <a href="http://regex.osherove.com/">The Regulator</a> es ideal para armar las cadenas, probarlas y ver si funcionan como queremos, esta herramienta está hecha en .Net (dicho sea de paso).</p>
<p>Ejemplo: si queremos evaluar una expresión matemática para extraer sus operadores y operandos, y despues convertirla a postfija para su evaluación, primero debemos masajearla un poco.</p>
<p>Entonces, si tenemos una expresion como:</p>
<pre>2.34m+344/444*(variable.value+33.55m+2^234)/2</pre>
<p>La podríamos evaluar con la siguiente expresión regular, que usa el concepto de grupos, pero no es dificil de entender:</p>
<pre>
(?(?[d]+)u002e(?[d]+)m)|
(?d+)|
(?u0028|u0029|u002a|u002b|u002d|u002f|u005e)|
u0022(?.+)u0022|
(?[a-zA-Z0-9u002du002e]+)</pre>
<p>donde:</p>
<ul>
<li>\d &#8211;&gt; representa un decimal.</li>
<li>[ ] &#8211;&gt; uno, cualquiera de los caracteres dentro de los corchetes.</li>
<li>(?  )  &#8211;&gt; se utiliza para hacer grupos.</li>
<li>\u00xx &#8211;&gt; representa un caracter unicode.</li>
<li>. &#8211;&gt;  cualquier caracter, excepto el retorno de carro.</li>
<li>| &#8211;&gt; exclusión.</li>
<li>a-z &#8211;&gt;  cualquier caracter entre a y z.</li>
</ul>
<p><a href="http://photos1.blogger.com/blogger/3699/1511/1600/theregulator.gif"></p>
<p><img src="http://photos1.blogger.com/blogger/3699/1511/400/theregulator.png" border="0" /></p>
<p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2006/03/28/expresiones-regulares-en-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

