1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario: Coincidencia de patrones con expresiones regulares] 2 00:00:02,000 --> 00:00:04,000 [John Universidad Mussman-Harvard] 3 00:00:04,000 --> 00:00:07,220 [Esta es CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Bien. Bueno, bienvenidos a todos. Esta es CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Mi nombre es Juan, y voy a hablar hoy acerca de las expresiones regulares. 6 00:00:16,610 --> 00:00:22,530 Las expresiones regulares son principalmente una herramienta, pero también se utiliza a veces 7 00:00:22,530 --> 00:00:28,650 en el código de forma activa para que coincida esencialmente patrones y cadenas. 8 00:00:28,650 --> 00:00:33,800 Así que aquí está un cómic web de xkcd. 9 00:00:34,440 --> 00:00:42,370 En este cómic hay un misterio de asesinato donde el asesino tiene 10 00:00:42,370 --> 00:00:47,860 seguido alguien de vacaciones, y los protagonistas tienen que 11 00:00:47,860 --> 00:00:52,500 buscar a través de 200 megabytes de mensajes de correo electrónico en busca de una dirección. 12 00:00:52,500 --> 00:00:56,090 Y están a punto de darse por vencido cuando alguien que conoce las expresiones regulares - 13 00:00:56,090 --> 00:01:00,550 presumiblemente un superhéroe - abalanza sobre él y escribe algo de código 14 00:01:00,550 --> 00:01:02,970 y resuelve el misterio de un asesinato. 15 00:01:02,970 --> 00:01:07,370 Así que probablemente eso será algo que tendrá la facultad de hacer 16 00:01:07,370 --> 00:01:09,370 después de este seminario. 17 00:01:09,370 --> 00:01:12,250 Nosotros sólo vamos a proporcionar una breve introducción a la lengua 18 00:01:12,250 --> 00:01:16,770 y le dará suficientes recursos para ir tras más recursos por su cuenta. 19 00:01:17,680 --> 00:01:21,700 >> Así expresiones regulares se ven básicamente como esto. 20 00:01:22,930 --> 00:01:25,550 Esta es una expresión regular en Ruby. 21 00:01:25,550 --> 00:01:29,280 Esto no es muy diferente entre los idiomas. 22 00:01:29,690 --> 00:01:37,630 Acabamos de barras para empezar y marcar la expresión regular en Ruby. 23 00:01:37,630 --> 00:01:42,880 Y esta es una expresión regular para buscar en el patrón de dirección de correo electrónico. 24 00:01:42,880 --> 00:01:49,160 Vemos, pues, en el primer bit busca cualquier carácter alfanumérico. 25 00:01:50,500 --> 00:01:54,880 Esto se debe a direcciones de correo electrónico a menudo tienen que comenzar con un carácter alfabético. 26 00:01:55,460 --> 00:01:59,330 Y entonces cualquier carácter especial seguido por el símbolo @. 27 00:01:59,330 --> 00:02:03,260 Y lo mismo para el nombre de dominio. 28 00:02:03,260 --> 00:02:10,030 Y a continuación, entre 2 y 4 caracteres para buscar el. Com,. Red, y así sucesivamente. 29 00:02:10,850 --> 00:02:13,200 Así que es otro ejemplo de expresión regular. 30 00:02:13,200 --> 00:02:17,270 Así expresiones regulares son protocolos para la búsqueda de patrones en el texto. 31 00:02:17,270 --> 00:02:21,130 Lo hacen comparaciones, selecciones y sustituciones. 32 00:02:21,690 --> 00:02:27,970 Así que un tercer ejemplo es encontrar todos los números de teléfono que terminan en 54, en un directorio. 33 00:02:27,970 --> 00:02:34,360 Así que antes de David rasga el directorio CS50 podríamos buscar 34 00:02:34,360 --> 00:02:40,450 un modelo en el que tenemos paréntesis, a continuación, los números 3 y luego terminar paréntesis, 35 00:02:40,450 --> 00:02:44,070 3 números más, un guión, número 2, y luego 54. 36 00:02:44,070 --> 00:02:48,310 Y eso sería esencialmente la forma nos encontramos con una expresión regular para buscar eso. 37 00:02:49,150 --> 00:02:52,960 >> Así que hay - que hemos hecho algunas cosas en CS50 que son un poco como 38 00:02:52,960 --> 00:02:59,740 expresiones regulares, por lo que - por ejemplo - en el archivo dictionary.C 39 00:02:59,740 --> 00:03:04,720 para el hechizo conjunto de problemas de verificación que haya usado fscanf 40 00:03:04,720 --> 00:03:07,930 para leer en una palabra del diccionario. 41 00:03:07,930 --> 00:03:16,240 Y se puede ver el porcentaje de 45s está en busca de una cadena de 45 caracteres. 42 00:03:16,240 --> 00:03:20,020 Así que es algo así como una expresión regular rudimentarios. 43 00:03:21,150 --> 00:03:26,060 Y usted puede tener 45 caracteres que se ajustan al proyecto de ley en ese 44 00:03:26,060 --> 00:03:28,080 y recoger los de arriba. 45 00:03:28,080 --> 00:03:33,480 Y entonces el segundo ejemplo, en el más reciente problema de programación de web 46 00:03:33,480 --> 00:03:40,760 establecida en el código distro para php que en realidad tienen una simple expresión regular. 47 00:03:40,760 --> 00:03:46,790 Y éste es simplemente tratando de comprobar si la página web que se pasa en 48 00:03:46,790 --> 00:03:51,940 coincide con cualquier ingreso o salida del registro. PHP. 49 00:03:52,220 --> 00:03:57,910 Y luego regresar verdadero o falso sobre la base de que la coincidencia de expresión regular. 50 00:03:59,400 --> 00:04:01,740 >> Así que cuando usted utiliza la expresión regular? 51 00:04:01,740 --> 00:04:04,820 ¿Por qué estás aquí hoy? 52 00:04:05,330 --> 00:04:08,480 Así que usted no desea utilizar la expresión regular cuando hay algo que 53 00:04:08,480 --> 00:04:11,640 hace el trabajo para usted, incluso con más facilidad. 54 00:04:11,640 --> 00:04:15,510 Así XML y HTML son en realidad bastante complicado 55 00:04:15,510 --> 00:04:18,480 para escribir expresiones regulares para, como veremos en un rato. 56 00:04:19,110 --> 00:04:23,280 Así que hay analizadores específicos para esos idiomas. 57 00:04:24,170 --> 00:04:30,060 También es necesario estar de acuerdo con las compensaciones y la exactitud con frecuencia. 58 00:04:30,060 --> 00:04:36,220 Si usted está tratando - por lo que hemos visto una expresión regular para una dirección de correo electrónico, 59 00:04:37,370 --> 00:04:42,590 pero dijo que quería una dirección de correo específica y poco a poco la 60 00:04:42,590 --> 00:04:48,570 expresión regular puede ser más compleja, ya que se hizo más precisa. 61 00:04:49,580 --> 00:04:52,260 Así que sería una compensación. 62 00:04:52,260 --> 00:04:55,330 Tienes que estar seguro de que usted está haciendo bien con la expresión regular. 63 00:04:55,330 --> 00:04:57,920 Si usted sabe exactamente lo que está buscando podría tener más sentido 64 00:04:57,920 --> 00:05:02,070 a poner en el tiempo y escribir un parser más eficaz. 65 00:05:02,070 --> 00:05:06,980 Y finalmente hay un problema histórico con la regularidad 66 00:05:06,980 --> 00:05:08,940 de expresiones y lenguajes. 67 00:05:08,940 --> 00:05:12,960 Las expresiones regulares son en realidad mucho más potente que 68 00:05:12,960 --> 00:05:16,450 expresiones regulares por decir en un sentido formal. 69 00:05:17,130 --> 00:05:20,150 >> Así que no quiero ir demasiado lejos en la teoría formal, 70 00:05:20,150 --> 00:05:24,000 pero la mayoría de lenguajes que código en realidad no son regulares. 71 00:05:24,000 --> 00:05:29,110 Y es por eso que a veces las expresiones regulares no se consideran todos los que seguro. 72 00:05:29,670 --> 00:05:33,150 Así que, básicamente, hay una jerarquía de Chomsky idiomas, 73 00:05:33,150 --> 00:05:38,400 y las expresiones regulares se construyen mediante la unión, concatenación, 74 00:05:38,400 --> 00:05:41,810 y la operación de Kleene estrellas que veremos en unos minutos. 75 00:05:43,130 --> 00:05:48,860 Si usted está interesado en la teoría de que hay mucho que hacer allí bajo el capó. 76 00:05:50,360 --> 00:05:55,880 >> Así que un poco de historia - sólo para el contexto aquí - conjuntos regulares subieron 77 00:05:55,880 --> 00:05:59,580 en la década de 1950, y luego tuvimos editores simples que 78 00:05:59,580 --> 00:06:03,300 incorporado expresiones regulares - sólo la búsqueda de cadenas. 79 00:06:03,570 --> 00:06:09,110 Grep - que es una herramienta de línea de comandos - fue uno de los primeros 80 00:06:09,110 --> 00:06:14,160 herramientas muy populares que incorporan expresiones regulares en los años 1960. 81 00:06:14,160 --> 00:06:20,560 En los años 80, Perl fue construido - es un lenguaje de programación que 82 00:06:20,560 --> 00:06:24,110 incorpora expresiones regulares muy prominente. 83 00:06:24,550 --> 00:06:30,130 Y luego, más recientemente, hemos tenido Perl expresiones regulares compatibles 84 00:06:30,130 --> 00:06:35,870 protocolos básicamente en otros idiomas que utilizan gran parte de la misma sintaxis. 85 00:06:36,630 --> 00:06:39,840 Por supuesto, el evento más importante fue en 2008 86 00:06:39,840 --> 00:06:43,040 donde tuvo lugar el primer Día Nacional de las expresiones regulares, 87 00:06:43,040 --> 00:06:47,350 que creo que es el 1 de junio, si usted quiere celebrar eso. 88 00:06:48,430 --> 00:06:50,840 >> Una vez más, sólo un poco más de teoría aquí. 89 00:06:52,180 --> 00:06:55,320 Así que hay un par de maneras diferentes de construir expresiones regulares. 90 00:06:55,950 --> 00:07:02,050 Una forma sencilla es la construcción de la expresión que se va a 91 00:07:02,050 --> 00:07:07,500 ejecutarse en la cadena de interpretar - básicamente construir un mini-programa pequeño que 92 00:07:07,500 --> 00:07:11,870 analizará las piezas de una cadena y ver, "Oh, es compatible con la expresión regular o no?" 93 00:07:12,250 --> 00:07:14,250 Y luego ejecutar ese. 94 00:07:14,250 --> 00:07:17,300 Así que si usted tiene una pequeña expresión regular, esto es, probablemente, 95 00:07:17,300 --> 00:07:19,380 la manera más eficiente de hacerlo. 96 00:07:20,090 --> 00:07:25,420 Y luego si - otra opción es mantener la reconstrucción de la 97 00:07:25,420 --> 00:07:30,260 expresión a medida que avanza, y que es la posibilidad Simulación. 98 00:07:30,440 --> 00:07:37,690 Y estos primeros intentos de algoritmos de expresiones regulares se 99 00:07:37,690 --> 00:07:44,330 relativamente simple y relativamente rápido, pero no tienen mucha flexibilidad. 100 00:07:44,330 --> 00:07:47,500 Así que para hacer aún algunas de las cosas que vamos a ver 101 00:07:47,500 --> 00:07:52,860 hoy hemos tenido que hacer expresión regular más compleja 102 00:07:52,860 --> 00:07:56,650 implementaciones que son potencialmente mucho más lenta, de modo que es algo a tener en cuenta 103 00:07:57,510 --> 00:08:02,920 También hay una expresión regular de la negación de la variedad ataque 104 00:08:02,920 --> 00:08:08,330 que explotar el potencial de estas nuevas implementaciones de 105 00:08:08,330 --> 00:08:10,930 expresiones regulares para llegar a ser muy compleja. 106 00:08:11,570 --> 00:08:15,650 Y en el mismo sentido que hemos visto en los ataques de desbordamiento de búfer, 107 00:08:15,650 --> 00:08:21,610 usted tiene ataques de ese trabajo por hacer bucles recursivos que 108 00:08:21,610 --> 00:08:24,400 desbordamiento de la capacidad de la memoria. 109 00:08:24,780 --> 00:08:29,540 Y, por cierto Regexen es uno de los plurales oficiales de expresión regular 110 00:08:29,540 --> 00:08:32,890 por analogía a los bueyes en el mundo anglosajón. 111 00:08:33,500 --> 00:08:40,169 >> Bien, entonces la biblioteca Python que muchos de ustedes aquí en persona tienen Macs, 112 00:08:40,169 --> 00:08:43,860 por lo que en realidad se puede sacar esto en la pantalla. 113 00:08:43,860 --> 00:08:47,480 Las expresiones regulares se construyen en Python. 114 00:08:48,070 --> 00:08:53,020 Y así Python está preinstalado en ordenadores Mac y también disponible en línea en este enlace. 115 00:08:53,770 --> 00:08:57,350 Así que si usted está viendo puede hacer una pausa y asegúrese de que tiene Python 116 00:08:58,080 --> 00:09:00,170 como jugamos aquí. 117 00:09:00,780 --> 00:09:06,420 Hay un manual en línea, así que si usted acaba de escribir Python en el ordenador 118 00:09:06,420 --> 00:09:10,500 verá que la versión aparece en el terminal. 119 00:09:11,070 --> 00:09:17,720 Así que he proporcionado un enlace al manual para la versión 2 de Python, así como una hoja de trucos. 120 00:09:17,720 --> 00:09:23,100 Hay una versión de Python 3, pero el Mac no necesariamente 121 00:09:23,100 --> 00:09:25,130 venido con ese precargado. 122 00:09:25,130 --> 00:09:27,360 Así que no es terriblemente diferente. 123 00:09:27,360 --> 00:09:33,270 Bueno, por lo que algunos aspectos básicos del uso de expresiones regulares en Python. 124 00:09:34,080 --> 00:09:42,650 >> Así que aquí he usado una expresión muy simple, así que lo hice Python import re 125 00:09:43,750 --> 00:09:47,070 y luego tomó el resultado de re.search. 126 00:09:47,070 --> 00:09:49,910 Y la búsqueda tiene 2 argumentos. 127 00:09:49,910 --> 00:09:56,040 La primera es la expresión regular, y el segundo es el texto 128 00:09:56,040 --> 00:09:58,290 o una cadena que quiere analizar. 129 00:09:58,290 --> 00:10:01,210 Y luego imprimí la result.group. 130 00:10:01,580 --> 00:10:05,860 Así que estas son las 2 funciones básicas que vamos a ver hoy en día 131 00:10:06,790 --> 00:10:10,170 en aprender acerca de las expresiones regulares. 132 00:10:10,170 --> 00:10:12,880 Así que romper con esta expresión regular aquí 133 00:10:12,880 --> 00:10:21,770 h y \ w y m so \ w sólo acepta cualquier carácter alfabético en allí. 134 00:10:21,850 --> 00:10:26,820 Así que aquí estamos buscando una "h" y luego otro carácter alfabético 135 00:10:26,820 --> 00:10:30,060 y luego m, por lo que aquí se correspondería con jamón 136 00:10:30,060 --> 00:10:34,480 en "Abraham Lincoln y jamón sándwiches". 137 00:10:35,040 --> 00:10:37,150 Este es el resultado de ese grupo. 138 00:10:37,680 --> 00:10:43,130 Otra cosa que podemos hacer es utilizar nuestras cuerdas antes del texto en Python. 139 00:10:43,130 --> 00:10:46,220 Así que supongo que voy a seguir adelante y lograr eso aquí. 140 00:10:46,220 --> 00:10:49,210 Python import re. 141 00:10:50,070 --> 00:10:54,000 Y si tuviera que hacer la misma cosa - digamos texto es, 142 00:10:55,390 --> 00:11:00,800 "Abraham," vamos a hacer un zoom in - Eso es. 143 00:11:01,610 --> 00:11:06,430 El texto es, "Abraham se come jamón." 144 00:11:07,460 --> 00:11:15,260 Bueno, y luego dar = re.search. 145 00:11:16,260 --> 00:11:22,020 Y entonces nuestra expresión puede ser h, y luego haré dot m. 146 00:11:22,020 --> 00:11:26,280 Así punto sólo se necesita cualquier carácter que no es una nueva línea con datos cuantificados, 147 00:11:26,280 --> 00:11:28,650 signos de porcentaje, nada de eso. 148 00:11:28,650 --> 00:11:38,030 Y luego el texto - auge - y luego result.group--sí. 149 00:11:38,030 --> 00:11:41,820 Así que eso es sólo la forma de aplicar la funcionalidad básica aquí. 150 00:11:42,300 --> 00:11:55,110 Si tuviéramos un anillo de texto que - ese texto loco - incluida decir un montón de barras invertidas 151 00:11:55,110 --> 00:12:01,180 y las cuerdas dentro y cosas que pueden parecerse a las secuencias de escape, 152 00:12:01,180 --> 00:12:08,480 entonces es probable que desee utilizar la entrada de texto sin formato para asegurarse de que sea aceptada. 153 00:12:08,480 --> 00:12:14,120 Y eso sólo se parece a eso. 154 00:12:14,120 --> 00:12:17,810 Así que si lo que estábamos buscando cada uno de ellos hay no hay que buscar nada. 155 00:12:19,070 --> 00:12:21,680 Pero eso es lo que le implementarlo; justo antes de la cadena de 156 00:12:21,680 --> 00:12:24,990 la expresión regular que puso la letra r. 157 00:12:26,150 --> 00:12:30,260 >> Está bien, así que vamos a seguir adelante. 158 00:12:30,260 --> 00:12:33,730 Muy bien - así que vamos a ver un par de patrones repetitivos aquí. 159 00:12:34,750 --> 00:12:39,150 Así que una cosa que quiero hacer es repetir las cosas 160 00:12:40,040 --> 00:12:42,480 como usted está buscando a través del texto. 161 00:12:42,480 --> 00:12:48,300 Así que hacer un seguido de cualquier número de b - hacer ab *. 162 00:12:48,630 --> 00:12:51,620 Y luego hay una serie de otras normas también. 163 00:12:51,620 --> 00:12:54,380 Y se puede ver todo esto, pues yo voy a correr a través de algunos de los 164 00:12:54,380 --> 00:12:57,630 más comúnmente usadas. 165 00:12:57,630 --> 00:13:03,920 Así ab + es seguido por cualquier N mayor que 0 de b. 166 00:13:04,510 --> 00:13:08,000 ab? es un seguido de 0 o 1 de b. 167 00:13:09,190 --> 00:13:18,580 ab {N} es seguido por N, b, y así sucesivamente. 168 00:13:18,580 --> 00:13:22,820 Si usted tiene 2 números de las llaves está especificando un rango 169 00:13:23,300 --> 00:13:25,440 que puede ser posiblemente emparejados. 170 00:13:26,390 --> 00:13:30,420 Así que vamos a ver más en un par de patrones repetitivos en un minuto. 171 00:13:31,960 --> 00:13:42,300 Así que 2 cosas a tener en cuenta al utilizar estas herramientas de comparación de patrones aquí. 172 00:13:42,300 --> 00:13:52,120 Así que decimos que queremos mirar el hm de "Abraham Lincoln hace bocadillos de jamón." 173 00:13:52,120 --> 00:13:55,230 Así que cambié el nombre de Abraham Lincoln de Abraham. 174 00:13:55,230 --> 00:14:00,290 Y ahora que estamos buscando lo que es devuelto por esta función de búsqueda, 175 00:14:00,290 --> 00:14:03,270 y sólo regresa el jamón en este caso. 176 00:14:03,620 --> 00:14:08,080 Y lo hace porque busca sólo toma naturalmente la izquierda más cola. 177 00:14:08,080 --> 00:14:12,130 Y todas las expresiones regulares a menos que se especifique lo contrario lo harán. 178 00:14:12,830 --> 00:14:18,880 Si quisiéramos encontrar todo lo que hay es una función para que - encontrar de todo. 179 00:14:18,880 --> 00:14:35,100 Así que podría acaba de ver como todo = re.findall ('h.m', texto) 180 00:14:35,100 --> 00:14:44,540 y luego all.group (). 181 00:14:44,540 --> 00:14:51,040 Todos produce tanto jamón y jamón, en este caso tanto de las cadenas de Abraham cada jamón. 182 00:14:51,610 --> 00:14:55,110 Así que esa es otra opción. 183 00:14:56,250 --> 00:15:06,940 >> Grande. La otra cosa a tener en cuenta es que las expresiones regulares se llevan la mayor intuitiva. 184 00:15:06,940 --> 00:15:09,520 Veamos este ejemplo. 185 00:15:10,200 --> 00:15:16,070 Lo hicimos más a la izquierda de búsqueda aquí, y luego intentó una búsqueda más grande 186 00:15:16,070 --> 00:15:18,800 utilizando el operador estrella de Kleene. 187 00:15:18,800 --> 00:15:24,180 Así que para "Abraham Lincoln hace sándwiches de jamón", y sólo regresó 188 00:15:24,180 --> 00:15:26,280 m como resultado. 189 00:15:26,280 --> 00:15:31,670 La razón de este error es que yo podría haber tenido cualquier número de 190 00:15:31,670 --> 00:15:36,140 h es porque no se especifica nada para ir entre h y m. 191 00:15:36,140 --> 00:15:42,010 El único ejemplo que no tenía m - los únicos ejemplos allí con m en el mismo 192 00:15:42,010 --> 00:15:46,220 y cualquier número de h de fuera sólo la cadena m. 193 00:15:46,490 --> 00:15:51,850 Luego intenté de nuevo, yo dije: "Bueno, vamos a obtener el mayor grupo real aquí." 194 00:15:51,850 --> 00:15:59,670 Y entonces hice h. * M, de modo que sólo devuelve cualquier número de caracteres entre h y m. 195 00:16:00,280 --> 00:16:02,950 Y si usted está recién empezando y pensando, "Oh, está bien, bueno esto se 196 00:16:02,950 --> 00:16:11,560 me consiga el jamón ", que realmente tiene de todo, desde la hora en Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 todo el camino hasta el extremo de jamón. 198 00:16:14,040 --> 00:16:18,110 Es codicioso, sino que ve h - todo esto otro texto - m, 199 00:16:18,110 --> 00:16:21,280 y eso es lo que se in 200 00:16:22,060 --> 00:16:27,480 Esto es particularmente notorio - esta es una característica que también puede 201 00:16:27,480 --> 00:16:30,670 especificar para no ser avaro con otras funciones. 202 00:16:31,480 --> 00:16:34,490 Pero esto es algo que tenemos que tener en cuenta especialmente 203 00:16:34,490 --> 00:16:38,720 cuando se mira en texto HTML, que es una de las razones que 204 00:16:38,720 --> 00:16:41,500 expresiones regulares son difíciles de HTML. 205 00:16:42,460 --> 00:16:46,310 Porque si usted tiene una etiqueta abierta HTML y luego un montón de cosas en el medio 206 00:16:46,310 --> 00:16:49,820 y luego otro HTML tag cerrado mucho más tarde en el programa, 207 00:16:49,820 --> 00:16:55,420 usted acaba de comer una gran cantidad de su código HTML, posiblemente por error. 208 00:16:56,200 --> 00:17:01,840 >> Muy bien - lo más caracteres especiales, como muchos otros idiomas, 209 00:17:01,840 --> 00:17:04,780 escapamos con la barra. 210 00:17:04,780 --> 00:17:10,329 Así que podemos usar el punto para especificar cualquier carácter excepto una línea nueva. 211 00:17:10,329 --> 00:17:14,550 Podemos utilizar la escalera de w para especificar cualquier carácter alfabético. 212 00:17:14,550 --> 00:17:20,329 Y por analogía escapar d para cualquier entero - carácter numérico. 213 00:17:20,630 --> 00:17:27,440 Podemos especificar - podemos usar paréntesis para especificar expresiones relacionadas. 214 00:17:27,440 --> 00:17:30,970 Así que esto sería aceptar a, b, o c. 215 00:17:31,320 --> 00:17:37,000 Y también podemos especificar o opciones para a o b. 216 00:17:37,000 --> 00:17:41,110 Por ejemplo - si estábamos buscando para múltiples posibilidades 217 00:17:41,110 --> 00:17:44,940 entre paréntesis podríamos utilizar el operador o, como en - 218 00:17:44,940 --> 00:17:52,480 así que vamos a volver a este ejemplo. 219 00:17:53,000 --> 00:17:59,790 Y ahora vamos a tomar - volvamos a este ejemplo aquí y, a continuación, 220 00:17:59,790 --> 00:18:12,290 tomar ae - por lo que este debe devolver - Supongo que esto es todavía Abraham. 221 00:18:12,290 --> 00:18:17,410 Así que esto - si hacemos todo - muy bien. 222 00:18:17,410 --> 00:18:22,700 Así que vamos a actualizar el texto aquí. 223 00:18:22,700 --> 00:18:34,690 "Abraham come jamón mientras el dobladillo - mientras dobladillo." Grande. 224 00:18:44,090 --> 00:18:47,330 Todos. Grande. Ahora tenemos el jamón, el jamón y el dobladillo. 225 00:18:48,510 --> 00:18:59,370 Mientras dobladillo - mientras tarareaba a él - mientras tarareaba le dobladillo. Grande. 226 00:19:00,350 --> 00:19:03,250 Es lo mismo. 227 00:19:03,820 --> 00:19:09,180 Ahora todo vuelve aún sólo jamón, jamón, y en el bajo sin necesidad de levantar el zumbido o el de él. 228 00:19:09,940 --> 00:19:22,600 Great - ¿y qué si nos queríamos ver, o bien que - por lo que también podríamos hacer 229 00:19:23,510 --> 00:19:33,810 él o - vamos a volver a eso. 230 00:19:34,810 --> 00:19:45,760 Okay - así - de acuerdo - en puestos también puede utilizar el cursor o el signo de dólar 231 00:19:45,760 --> 00:19:49,350 para especificar que usted está buscando algo en el comienzo o el final de una cadena. 232 00:19:50,260 --> 00:19:52,260 O el comienzo o el final de una palabra. 233 00:19:52,400 --> 00:19:54,470 Esa es una manera de usarla. 234 00:19:55,630 --> 00:20:01,160 >> Bien - así que vamos a jugar con un bloque de un poco más grande de texto. 235 00:20:03,950 --> 00:20:08,310 Digamos esta fila aquí - esta declaración aquí. 236 00:20:08,310 --> 00:20:11,360 El poder de la expresión regular es que se pueden especificar patrones 237 00:20:11,360 --> 00:20:13,390 no sólo fijado caracteres. 238 00:20:14,900 --> 00:20:18,790 Hagamos - llamémoslo este bloque. 239 00:20:22,400 --> 00:20:27,110 A continuación, vamos a leer todo eso pulg 240 00:20:28,890 --> 00:20:50,820 Y entonces a - hagamos todo =, así que ¿cuáles son algunas cosas que podríamos buscar aquí rentable? 241 00:20:50,820 --> 00:20:54,070 Podríamos buscar la oreja expresión. 242 00:20:55,050 --> 00:21:01,520 No es muy interesante. ¿Qué te parece? Ya veremos lo que pasa. 243 00:21:03,710 --> 00:21:05,710 Le di un problema. 244 00:21:06,380 --> 00:21:10,750 Por lo que cualquier número de cosas antes de volver y todo. 245 00:21:10,750 --> 00:21:15,630 Así que debe devolver todo desde el principio hasta los re quizás un par de veces. 246 00:21:18,800 --> 00:21:21,970 Y aquí tenemos el poder de las expresiones regulares es que ellos 247 00:21:21,970 --> 00:21:24,900 Puede especificar los patrones no sólo personajes aquí son. 248 00:21:24,900 --> 00:21:28,510 Así que todo el camino hasta la re final, que comenzó con la más a la izquierda y era codicioso. 249 00:21:30,710 --> 00:21:32,710 Veamos - ¿qué más se puede buscar. 250 00:21:32,710 --> 00:21:39,860 Supongo que una cosa si estaban interesados ​​en la búsqueda de los pronombres ella y él, 251 00:21:39,860 --> 00:21:44,600 se puede comprobar por s es igual a 0 ó 1 252 00:21:44,600 --> 00:21:49,710 y la expresión que él, y que no es, probablemente, va a regresar - 253 00:21:49,710 --> 00:21:58,020 oh, supongo que regresó, porque no estamos ante el poder, ese día, aquí estamos. 254 00:22:00,590 --> 00:22:06,270 Vamos a tratar de precisar que esto tiene que venir en el comienzo de algo. 255 00:22:06,640 --> 00:22:09,530 Vamos a ver si eso cae. 256 00:22:09,530 --> 00:22:19,630 Así que podemos hacer de grasa, y hay que no hacer nada, porque ella y él 257 00:22:19,630 --> 00:22:22,870 no se producen en esta frase. 258 00:22:24,960 --> 00:22:30,410 Grande. Bien - así que volvimos a el gato aquí. 259 00:22:30,410 --> 00:22:35,720 Patrones tan complejo está dañando el cerebro. 260 00:22:35,720 --> 00:22:40,500 Así que es por eso que utilizamos expresiones regulares para evitar estos problemas. 261 00:22:40,820 --> 00:22:43,520 >> Así que aquí están algunos otros medios útiles que puedes jugar. 262 00:22:43,520 --> 00:22:50,290 Nos fijamos en búsqueda de hoy, pero también se puede utilizar partido, partido, findall y grupos. 263 00:22:50,290 --> 00:22:53,970 Así otras cosas interesantes que puedes hacer con las expresiones regulares, además de sólo 264 00:22:53,970 --> 00:22:58,870 en busca de patrones está tomando un patrón y la celebración de todos los partidos - 265 00:22:58,870 --> 00:23:02,530 sus variables - y luego con los de su código más adelante. 266 00:23:02,850 --> 00:23:05,980 Eso puede ser muy útil. Otras cosas que pueden estar contando. 267 00:23:05,980 --> 00:23:11,720 Así que podemos contar el número de instancias de un patrón de expresión regular, 268 00:23:11,720 --> 00:23:13,960 y eso es lo que podemos utilizar grupos para. 269 00:23:13,960 --> 00:23:17,550 Y otros modos, así también son posibles. 270 00:23:18,040 --> 00:23:22,980 Así que sólo quiero hablar un poco más acerca de otras maneras de utilizar expresiones regulares. 271 00:23:22,980 --> 00:23:29,100 >> Así que una aplicación más avanzada está en coincidencia aproximada. 272 00:23:29,100 --> 00:23:33,450 Así que si estás buscando un texto para la expresión, Julio César, 273 00:23:33,450 --> 00:23:37,740 y ves bien Cayo Julio César, o el nombre de Julio César en otros idiomas, 274 00:23:37,740 --> 00:23:44,400 entonces es posible que también desee asignar cierto peso a esos valores. 275 00:23:44,400 --> 00:23:48,930 Y si es lo suficientemente cerca - si se cruza un umbral determinado - entonces usted quiere 276 00:23:48,930 --> 00:23:50,860 para ser capaz de aceptar Julio César. 277 00:23:50,860 --> 00:24:00,580 Así que hay un par de diferentes implementaciones para que en algunos otros idiomas. 278 00:24:02,580 --> 00:24:08,420 Aquí están algunas otras herramientas, Regex Pal - una pequeña aplicación práctica en línea para 279 00:24:08,420 --> 00:24:12,190 comprobar si sus expresiones regulares se componen correctamente. 280 00:24:12,190 --> 00:24:18,500 También existen herramientas independientes que se pueden ejecutar desde el escritorio 281 00:24:18,500 --> 00:24:22,100 como Pico Ultra, y así como libros de cocina solo. 282 00:24:22,100 --> 00:24:25,410 Así que si usted está haciendo un proyecto que implica un montón de expresiones regulares 283 00:24:25,410 --> 00:24:29,810 este es probablemente el lugar para ir fuera del alcance de hoy. 284 00:24:31,520 --> 00:24:35,770 Y a continuación, sólo para darle un sentido de lo común que es 285 00:24:35,770 --> 00:24:44,090 hay grep en Unix, Perl tiene incorporado, y C no PCRE para C. 286 00:24:44,090 --> 00:24:48,890 Y luego todos los otros idiomas también tienen paquetes de expresiones regulares 287 00:24:48,890 --> 00:24:52,020 que operan esencialmente con la misma sintaxis que tenemos el gusto de hoy. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, etc. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search es en realidad vale la pena mencionar, es uno de los 290 00:24:58,980 --> 00:25:05,720 relativamente pocas aplicaciones por ahí que permite al público tener acceso a 291 00:25:05,720 --> 00:25:07,800 su base de datos usando expresiones regulares. 292 00:25:07,800 --> 00:25:12,920 Así que si usted busca en Google Code Search se puede encontrar el código 293 00:25:12,920 --> 00:25:16,880 si usted está buscando un ejemplo de cómo se puede usar una función, 294 00:25:16,880 --> 00:25:21,610 se puede utilizar una expresión regular para encontrar que la función que se utiliza en todo tipo de casos diferentes. 295 00:25:21,610 --> 00:25:28,000 Se podría buscar fwrite, y entonces se podría buscar la bandera de escritura o lectura 296 00:25:28,000 --> 00:25:32,000 si quieres un ejemplo de fwrite se utiliza en este caso. 297 00:25:33,530 --> 00:25:37,010 Así que lo mismo allí, y aquí están algunas referencias. 298 00:25:37,010 --> 00:25:40,990 Este estará disponible en línea, así que ir hacia adelante si 299 00:25:40,990 --> 00:25:45,560 que desea buscar en Python, grep, Perl - lo que desea es obtener algo de inspiración 300 00:25:45,560 --> 00:25:50,650 o si desea buscar más en la teoría aquí es un buen salto de lugares. 301 00:25:50,650 --> 00:25:53,870 Muchas gracias. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]