{"id":17,"date":"2008-08-08T15:23:23","date_gmt":"2008-08-08T13:23:23","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=17"},"modified":"2022-08-20T18:26:25","modified_gmt":"2022-08-20T16:26:25","slug":"bsqueda-avanzada-mediante-expresiones-regulares-regexp-y-reemplazo-medio","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=17","title":{"rendered":"B&uacute;squeda avanzada mediante expresiones regulares (regexp) y reemplazo medio"},"content":{"rendered":"<p>Ya sabemos como poder buscar y reemplazar cadenas por los art\u00edculos anteriores. Sin embargo existe una manera m\u00e1s avanzada y potente de poder buscar cadenas, y es mediante el uso de expresiones regulares, antes de comenzar a explicar expresiones regulares, detallar\u00e9 cuales son los comandos sobre Emacs los cuales nos permiten hacer uso de ellas:<\/p>\n<ul>\n<li><strong>C-M-s<\/strong> : &#8216;<span style=\"color: #0000ff;\">isearch-forward-regexp<\/span>&#8216;; nos permite buscar hacia delante una cadena dado un patr\u00f3n.<\/li>\n<\/ul>\n<ul>\n<li><strong>C-M-r<\/strong> : &#8216;<span style=\"color: #0000ff;\">isearch-backward-regexp<\/span>&#8216;; nos permite buscar hacia detr\u00e1s una cadena dado un patr\u00f3n.<\/li>\n<\/ul>\n<ul>\n<li><strong>C-M-s C-M-s<\/strong> : nos permite buscar hacia delante de forma incremental una cadena dado un patr\u00f3n.<\/li>\n<\/ul>\n<ul>\n<li> <strong>C-M-r C-M-r<\/strong> : nos permite buscar hacia detr\u00e1s de forma incremental una cadena dado un patr\u00f3n.<\/li>\n<\/ul>\n<p>En el momento que utilicemos uno de estos dos primeros comandos se nos preguntar\u00e1 que patr\u00f3n debemos usar para buscar cadenas y aqu\u00ed es donde entra en juego el uso de las expressiones regulares para poder realizar esta b\u00fasqueda avanzada, tan s\u00f3lo citar\u00e9 las m\u00e1s comunes:<\/p>\n<ul>\n<li> <strong>^<\/strong> : Principio de l\u00ednea<\/li>\n<\/ul>\n<ul>\n<li><strong>$<\/strong> : Fin de l\u00ednea<\/li>\n<\/ul>\n<ul>\n<li><strong>.<\/strong> : Cualquier car\u00e1cter (1)<\/li>\n<li><strong>?<\/strong> : Cualquier car\u00e1cter (0 o 1)<\/li>\n<\/ul>\n<ul>\n<li> <strong>*<\/strong> : Cualquier car\u00e1cter (0 o m\u00e1s coincidencias)<\/li>\n<\/ul>\n<ul>\n<li><strong>+<\/strong> : Cualquier car\u00e1cter (1 o m\u00e1s coincidencias)<\/li>\n<\/ul>\n<ul>\n<li><strong>\\&lt;<\/strong> : Principio de palabra<\/li>\n<\/ul>\n<ul>\n<li><strong>\\&gt;<\/strong> : Fin de palabra<\/li>\n<\/ul>\n<ul>\n<li><strong>[ ]<\/strong> : Rango de car\u00e1cteres<\/li>\n<\/ul>\n<ul>\n<li><strong>\\s<\/strong>, <strong>\\S<\/strong> : Car\u00e1cter en blanco o cualquier car\u00e1cter excepto un car\u00e1cter en blanco.<\/li>\n<\/ul>\n<ul>\n<li><strong>\\d<\/strong>, <strong>\\D<\/strong> : D\u00edgito o cualquier car\u00e1cter excepto un d\u00edgito.<\/li>\n<\/ul>\n<ul>\n<li><strong>\\w<\/strong>, <strong>\\W<\/strong> : Cualquier c\u00e1racter del alfabeto o d\u00edgito (incluyendo gui\u00f3n abajo). O cualquier car\u00e1cter que no sea del alfabeto ni un n\u00famero ni un gui\u00f3n abajo.<\/li>\n<\/ul>\n<ul>\n<li><strong>\\|<\/strong> : Or condicional<\/li>\n<\/ul>\n<ul>\n<li> <strong>\\(\\)<\/strong> : Grupo parental<\/li>\n<\/ul>\n<p>Pondr\u00e9 un ejemplo simple de cada uno, para aclarar el uso de expresiones regulares:<\/p>\n<ul>\n<li> <span style=\"color: #008000;\">^foo<\/span> : L\u00edneas que comiencen por la palabra foo.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">bar$<\/span> : L\u00edneas que terminen por la palabra bar.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">a.b<\/span> : Palabras que tengan una a al principio, una b al final y cualquier car\u00e1cter entre ambas axb, adb, abb, etc.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">a*b<\/span> : Palabras que tengan una a al principio, una b al final y cualquier car\u00e1cter entre ambas o no axb, adb, abb, ab, etc.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">a+b<\/span> : Palabras que tengan una a al principio, una b al final y cualquier car\u00e1cter(s) entre ambas axb, adb, abb, acccccb, adfghb, etc.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">&lt;\\foo<\/span> : Palabras que comiencen por foo.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #008000;\">bar\\&gt;<\/span> : Palabras que acaben en bar.<\/li>\n<\/ul>\n<ul>\n<li><span style=\"color: #000000;\"> <span style=\"color: #008000;\">[a-zA-Z]<\/span> <\/span>: Cualquier letra del alfabeto, en may\u00fasculas o min\u00fasculas.<\/li>\n<\/ul>\n<ul>\n<li> <span style=\"color: #000000;\"> <span style=\"color: #008000;\">\\(a\\|b\\|c\\|d\\)x<\/span><\/span> : Palabras que contengan ax, bx, cx o dx.<\/li>\n<\/ul>\n<p>En la misma <a href=\"http:\/\/www.blackhats.es\/emacs\/emacs-refcard.pdf\">quick reference card de emacs<\/a> podr\u00e9is encontrar un apartado para expresiones regulares. Y, aunque todos los lenguajes usan de forma parecida las mismas reglas para trabajar con expresiones regulares, no siempre es as\u00ed, as\u00ed que podemos hacer referencia a la web de Scott Klarr donde tenemos un <a href=\"http:\/\/www.scottklarr.com\/topic\/103\/regular-expressions-cheat-sheets\/\">art\u00edculo<\/a> s\u00f3lo dedicado a gu\u00edas de referencia para expresiones regulares.<\/p>\n<p>Para el reemplazo avanzado podr\u00edamos hacer uso <strong>C-M-%<\/strong> o bien mediante su nombre de comando <strong>M-x query-replace-regexp<\/strong>, o bien tambien podemos hacer uso de <strong>M-x isearch-query-replace-regexp<\/strong> la cual no tiene keystroke asociada por defecto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ya sabemos como poder buscar y reemplazar cadenas por los art\u00edculos anteriores. Sin embargo existe una manera m\u00e1s avanzada y potente de poder buscar cadenas, y es mediante el uso de expresiones regulares, antes de comenzar a explicar expresiones regulares, detallar\u00e9 cuales son los comandos sobre Emacs los cuales nos permiten hacer uso de ellas: [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[28],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-basic","tag-emacs-expresiones-regulares-busqueda-avanzada-reemplazo"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/17"}],"collection":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17"}],"version-history":[{"count":1,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":811,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/17\/revisions\/811"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}