{"id":16157,"date":"2022-07-16T19:00:08","date_gmt":"2022-07-16T19:00:08","guid":{"rendered":"https:\/\/blogs.ugto.mx\/rea\/?p=16157"},"modified":"2022-09-24T02:50:57","modified_gmt":"2022-09-24T02:50:57","slug":"clase-digital-3-herramientas-de-software-regexp","status":"publish","type":"post","link":"https:\/\/blogs.ugto.mx\/rea\/clase-digital-3-herramientas-de-software-regexp\/","title":{"rendered":"Clase digital 3. Herramientas de software: RegExp"},"content":{"rendered":"\n\n\n<div class=\"wp-block-cover\" style=\"min-height:284px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\"><\/span><img decoding=\"async\" class=\"wp-block-cover__image-background wp-image-17985\" alt=\"flat screen computer monitor\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a.jpg\" style=\"object-position:63% 18%\" data-object-fit=\"cover\" data-object-position=\"63% 18%\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"1200\" class=\"wp-block-cover__image-background wp-image-17985\" alt=\"flat screen computer monitor\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a.jpg\" style=\"object-position:63% 18%\" data-object-fit=\"cover\" data-object-position=\"63% 18%\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a.jpg 800w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a-200x300.jpg 200w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a-683x1024.jpg 683w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/dbordtrr1a-768x1152.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/noscript><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-base-3-color has-text-color has-large-font-size wp-block-paragraph\">Herramientas de software: RegExp<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduccion\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Hola!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es un placer encontrarte en esta tercera sesi\u00f3n, conf\u00edo en que te encuentres gozando de una salud envidiable, pues de ello depende tu estabilidad acad\u00e9mica. Y entrando en materia te ofrezco la bienvenida a la sesi\u00f3n, espero que sea de tu agrado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta sesi\u00f3n aprender\u00e1s sobre expresiones regulares o regex. Las expresiones regulares son una notaci\u00f3n muy poderosa, flexible y eficiente para especificar patrones de b\u00fasqueda de texto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez que conozcas las expresiones regulares comprender\u00e1s por qu\u00e9 son muy valiosas para el an\u00e1lisis l\u00e9xico en los compiladores, la b\u00fasqueda de patrones, y el procesamiento de texto. Adem\u00e1s, podr\u00e1s f\u00e1cilmente dise\u00f1ar patrones de b\u00fasqueda para efectuar el an\u00e1lisis l\u00e9xico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las expresiones regulares fueron propuestas originalmente para describir lenguajes formales. El conocimiento sobre las expresiones regulares tambi\u00e9n puede aplicarse en otras aplicaciones como los editores de texto, editores de c\u00f3digo y en la b\u00fasqueda y modificaci\u00f3n de texto. El conocimiento sobre las expresiones regulares tiene tambi\u00e9n aplicaci\u00f3n en el \u00e1rea de teor\u00eda de los lenguajes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existen muchas versiones de expresiones regulares. Las herramientas Lex\/flex soportan una versi\u00f3n llamada expresiones regulares extendidas (ERE) POSIX. En esta parte s\u00f3lo veremos esa versi\u00f3n de expresiones regulares de Lex\/flex.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aparte de la versi\u00f3n de Lex\/flex, existen otras versiones muy populares tales como las llamadas expresiones regulares compatibles con Perl (PCRE) que est\u00e1n implementadas en numerosas aplicaciones como el editor Notepad++, servidor Apache, lenguajes script como PHP y R. La sintaxis de PCRE es mucho m\u00e1s poderosa y flexible que cualquiera de las versiones POSIX (BRE y ERE) y que muchas otras librer\u00edas de expresiones regulares.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las expresiones regulares son una herramienta muy poderosa para el programador porque simplifica enormemente ciertas tareas complejas de procesamiento de texto que de otra manera requerir\u00edan de bastante c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin m\u00e1s que agregar. \u00a1Te invito a proseguir con mucho \u00e1nimo!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desarrollo-del-tema\">Desarrollo del tema <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Expresiones Regulares:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En 1956, el matem\u00e1tico Kleene ide\u00f3 una notaci\u00f3n simple para representar conjuntos regulares y la llam\u00f3 expresiones regulares. Las expresiones regulares describen lenguajes y por esta raz\u00f3n se pueden utilizar para el an\u00e1lisis l\u00e9xico en compiladores e int\u00e9rpretes.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En 1968, Thompson describi\u00f3 un algoritmo para construir aut\u00f3matas de estado finito a partir de expresiones regulares para implementarlo en un editor llamado qed. Tiempo despu\u00e9s, lo implement\u00f3 en las herramientas ed y grep de UNIX.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--1024x684.jpg\" alt=\"\" class=\"wp-image-17993\" width=\"768\" height=\"513\" \/><noscript><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--1024x684.jpg\" alt=\"\" class=\"wp-image-17993\" width=\"768\" height=\"513\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--1024x684.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--300x200.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--768x513.jpg 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--1536x1026.jpg 1536w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene--272x182.jpg 272w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/Kleene-.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/noscript><figcaption><strong>Imagen 1.<\/strong> Stephen Cole Kleene fue un l\u00f3gico y matem\u00e1tico estadounidense. Introdujo la operaci\u00f3n Clausura de Kleene, denotada por el s\u00edmbolo V*.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Una expresi\u00f3n regular o regex es una secuencia de caracteres formando un patr\u00f3n que describe un conjunto de cadenas. Existen dos tipos de caracteres: metacar\u00e1cter, con significado especial, y car\u00e1cter regular, con un significado literal. Por ejemplo, en el regex \u00abt\u2217\u00bb, \u2032t\u2032 es un car\u00e1cter literal mientras que &#8216;\u2217\u2032 es un metacar\u00e1cter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existen muchas versiones de expresiones regulares. En 1986 se cre\u00f3 el est\u00e1ndar IEEE POSIX con el que se intent\u00f3 estandarizarlas. El est\u00e1ndar POSIX destil\u00f3 las versiones comunes en dos: expresiones regulares b\u00e1sicas (BRE) y expresiones regulares extendidas (ERE). Lex\/flex soportan expresiones regulares extendidas POSIX. Enseguida describiremos esa versi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Metacaracteres:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los metacaracteres en una expresi\u00f3n regular de Lex\/flex incluyen los siguientes:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>.<\/td><td>Punto. Representa cualquier car\u00e1cter excepto avance de l\u00ednea.<\/td><\/tr><tr><td>[]<\/td><td>Clase de caracteres. Representa un car\u00e1cter de los que est\u00e1n entre&nbsp;<br>&#8216;[&#8216; y &#8216;]&#8217;. Uno o m\u00e1s rangos de caracteres pueden ser indicados usando guion \u2018-\u2018. Si el primer car\u00e1cter despu\u00e9s del \u2018[\u2019 es un guion o un \u2018]\u2019, \u00e9ste es interpretado literalmente. Si es un \u2018^\u2019, el significado es cambiado a complemento de clase. Cualquier otro metacar\u00e1cter es interpretado literalmente, excepto las secuencias de escape que inician con \u2018\\\u2019.<br><br>[a-z]{-}[jv]&nbsp; o [a-z]{+}[jv]<br>Diferencia o uni\u00f3n. Representa la diferencia o uni\u00f3n entre la clase de caracteres de la izquierda y la clase de caracteres de la derecha.<\/td><\/tr><tr><td>^<\/td><td>Inicio de l\u00ednea. Este metacar\u00e1cter especifica que los patrones que siguen deben estar a inicio de l\u00ednea.<\/td><\/tr><tr><td>$<\/td><td>Fin de l\u00ednea. Este metacar\u00e1cter especifica que los patrones que lo anteceden deben estar a final de l\u00ednea.<br><br>{m}, {m,n}, {m,} o {nombrepatron}<br><br>Si contiene uno o dos valores, representa el n\u00famero m\u00ednimo y m\u00e1ximo de coincidencias (repeticiones) del patr\u00f3n previo. Si falta el n\u00famero enseguida de la coma, se asume que el m\u00e1ximo es infinito. Si contiene un nombre, representa la expansi\u00f3n de un nombre de patr\u00f3n.<\/td><\/tr><tr><td>\\<\/td><td>Se utiliza para el escape de metacaracteres y como parte de secuencias de escape. Por ejemplo,&nbsp;<br>\\n es un avance de l\u00ednea mientras que \\* es el car\u00e1cter literal asterisco \u2018*\u2019.<\/td><\/tr><tr><td>*<\/td><td>Repetici\u00f3n de cero o m\u00e1s. Representa cero o m\u00e1s coincidencias (repeticiones) del patr\u00f3n previo.<\/td><\/tr><tr><td>+<\/td><td>Repetici\u00f3n de uno o m\u00e1s. Representa una o m\u00e1s coincidencias (repeticiones) del patr\u00f3n previo.<\/td><\/tr><tr><td>?<\/td><td>Opcional. Representa cero o una coincidencia del patr\u00f3n previo o que \u00e9ste es opcional.<\/td><\/tr><tr><td>|<\/td><td>Alternancia. Representa la coincidencia ya sea del anterior patr\u00f3n o del siguiente.<\/td><\/tr><tr><td>()<\/td><td>Agrupamiento. Agrupa patrones como uno solo. Es \u00fatil para patrones complejos que usan&nbsp;<br>*, +, ?, y |.<br>\u00aba+b*c\u00bb<br>Caracteres literales. Todos los metacaracteres excepto \\ son interpretados de manera literal.<\/td><\/tr><tr><td>\/<\/td><td>Contexto posterior. Representa una coincidencia del patr\u00f3n previo pero s\u00f3lo si hay una coincidencia del patr\u00f3n siguiente.<\/td><\/tr><tr><td>&lt;estado&gt; o &lt;estado1,&nbsp;estado2&gt;<\/td><td>Cuando se coloca al inicio de un patr\u00f3n, representa que el patr\u00f3n que sigue es procesado s\u00f3lo cuando est\u00e1 activo uno de los estados iniciales dados.<\/td><\/tr><tr><td>&lt;&lt;EOF&gt;&gt;<\/td><td>Fin de archivo. Representa la coincidencia con el fin de archivo.<\/td><\/tr><tr><td>(?# comentario)<\/td><td>Representa un comentario al estilo Perl.<\/td><\/tr><tr><td>(?a:patr\u00f3n) o <br>(?a-x:patr\u00f3n)<\/td><td>Modificadores estilo Perl. Representan que el patr\u00f3n es interpretado con el modificador&nbsp;<br>a pero sin el modificador x. Los modificadores son: i para insensibilidad a may\u00fasculas-min\u00fasculas, s para interpretar como si todo fuera una sola l\u00ednea, y x para ignorar espacios en blanco y comentarios de C en el patr\u00f3n.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las expresiones regulares son una notaci\u00f3n originalmente creada para describir un lenguaje formal. Un lenguaje se define como un conjunto de cadenas escritas en un alfabeto dado.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo tanto, las expresiones regulares se utilizan para especificar lenguajes de programaci\u00f3n con la ayuda de herramientas de desarrollo de compiladores tales como Lex\/flex.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las expresiones regulares son una herramienta poderosa y flexible para efectuar ciertas tareas como son la b\u00fasqueda de patrones, procesamiento de texto, filtraje y validaci\u00f3n de datos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las expresiones regulares son una herramienta muy valiosa para los programadores ya que ayudan a simplificar ciertas tareas complejas que de otra manera requerir\u00edan de mucho esfuerzo y c\u00f3digo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A pesar de lo anterior, las expresiones regulares no pueden utilizarse para cualquier tarea. Por ejemplo, una de las limitaciones de las expresiones regulares es que no pueden usarse para describir lenguajes no regulares o conjuntos no regulares de cadenas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existen much\u00edsimas versiones de expresiones regulares. Flex soporta una versi\u00f3n de expresiones regulares llamada POSIX ERE (expresiones regulares extendidas).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una expresi\u00f3n regular o patr\u00f3n es una secuencia de metacaracteres y caracteres regulares.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lex\/flex soportan los metacaracteres siguientes: punto que sirve para buscar cualquier car\u00e1cter excepto avance de l\u00ednea, clase de caracteres que sirve para buscar cualquier car\u00e1cter de una clase, diferencia y uni\u00f3n de clases de caracteres, agrupamiento de patrones, repetici\u00f3n de cero o m\u00e1s (cerradura de Kleene), repetici\u00f3n de uno o m\u00e1s (cerradura positiva), opcional, alternancia de patrones, escape de metacaracteres, interpretaci\u00f3n literal de cadenas de caracteres, contexto posterior, expansi\u00f3n de patrones con nombre, procesamiento dependiente de estado inicial, patr\u00f3n de fin de archivo, comentarios estilo Perl, modificadores estilo Perl.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hemos llegado al final de la clase. \u00a1Te felicito por tu logro! En caso de dudas consulta a tu asesor. A continuaci\u00f3n te invito a resolver y entregar en tiempo y forma la consigna incluida en esta clase.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Vas avanzando muy bien! Contin\u00faa con gusto y entusiasmo tu estudio. Nos leemos en la siguiente lecci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fuentes-de-informacion\">Fuentes de informaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/es.wikipedia.org\/wiki\/Expresi%C3%B3n_regular\" target=\"_blank\" rel=\"noreferrer noopener\">Expresi\u00f3n regular \u2013 Wikipedia, la enciclopedia libre.<\/a><\/li><li><a href=\"https:\/\/regex101.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">regex101: build, test, and debug regex.<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n \u00a1Hola! Es un placer encontrarte en esta tercera sesi\u00f3n, conf\u00edo en que te encuentres gozando de una salud envidiable, pues de ello depende tu estabilidad acad\u00e9mica. Y entrando en materia te ofrezco la bienvenida a la sesi\u00f3n, espero que sea de tu agrado. En esta sesi\u00f3n aprender\u00e1s sobre expresiones regulares o regex. Las expresiones &#8230; <a title=\"Clase digital 3. Herramientas de software: RegExp\" class=\"read-more\" href=\"https:\/\/blogs.ugto.mx\/rea\/clase-digital-3-herramientas-de-software-regexp\/\" aria-label=\"Leer m\u00e1s sobre Clase digital 3. Herramientas de software: RegExp\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":142,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[180,19,471],"tags":[41,472,473],"class_list":["post-16157","post","type-post","status-publish","format-standard","hentry","category-cideap","category-ingenieria-en-sistemas-computacionales","category-uda-compiladores","tag-clase-digital","tag-iili06025","tag-jose-ruiz-pinales"],"acf":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/users\/142"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/comments?post=16157"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16157\/revisions"}],"predecessor-version":[{"id":19156,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/16157\/revisions\/19156"}],"wp:attachment":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/media?parent=16157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/categories?post=16157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/tags?post=16157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}