~ubuntu-branches/ubuntu/vivid/kde-l10n-es/vivid

« back to all changes in this revision

Viewing changes to docs/kde-baseapps/kate/regular-expressions.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-04-04 14:14:50 UTC
  • mfrom: (1.12.27)
  • Revision ID: package-import@ubuntu.com-20130404141450-2d7izkhncd45keps
Tags: 4:4.10.2-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<appendix id="regular-expressions">
2
 
<appendixinfo>
3
 
<authorgroup>
4
 
<author
5
 
>&Anders.Lund; &Anders.Lund.mail;</author>
6
 
<othercredit role="translator"
7
 
> <firstname
8
 
>Rocío</firstname
9
 
> <surname
10
 
>Gallego</surname
11
 
> <affiliation
12
 
><address
13
 
><email
14
 
>traducciones@rociogallego.com</email
15
 
></address
16
 
></affiliation
17
 
> <contrib
18
 
>Traductora</contrib
19
 
> </othercredit
20
 
><othercredit role="translator"
21
 
> <firstname
22
 
>Marcos</firstname
23
 
> <surname
24
 
>Fouces Lago</surname
25
 
> <affiliation
26
 
><address
27
 
><email
28
 
>mfouces@yahoo.es</email
29
 
></address
30
 
></affiliation
31
 
> <contrib
32
 
>Traductor</contrib
33
 
> </othercredit
34
 
35
 
</authorgroup>
36
 
</appendixinfo>
37
 
 
38
 
<title
39
 
>Expresiones regulares</title>
40
 
 
41
 
<synopsis
42
 
>Este apéndice contiene una breve pero probablemente suficiente
43
 
y completa introducción al mundo de las <emphasis
44
 
>expresiones
45
 
regulares</emphasis
46
 
>. Documenta las expresiones regulares tal
47
 
y como aparecen en &kappname;, que no son compatibles con las expresiones
48
 
regulares de perl, ni de <command
49
 
>grep</command
50
 
>, entre otros.</synopsis>
51
 
 
52
 
<sect1>
53
 
 
54
 
<title
55
 
>Introducción</title>
56
 
 
57
 
<para
58
 
>Las <emphasis
59
 
>expresiones regulares</emphasis
60
 
> no proporcionan un método para describir el posible contenido de una cadena de texto de forma que pueda ser interpretada por un pequeño módulo de software, y se pueda investigar si un texto corresponde con el buscado y, en el caso de aplicaciones avanzadas, se pongan los medios para recuperar partes del texto coincidente.</para>
61
 
 
62
 
<para
63
 
>Por ejemplo, pongamos que quiere buscar un texto que es el comienzo de un párrafo e incluye los nombres «Henrik» o «Pernille», seguidos de alguna forma del verbo «hablar».</para>
64
 
 
65
 
<para
66
 
>En una búsqueda normal, debería comenzar a buscar por el primer nombre, «Henrik» quizá seguido de «hab», de esta manera: <userinput
67
 
>Henrik hab</userinput
68
 
>; y mientras busca coincidencias, debe descartar aquellas que no estén al principio de un párrafo, así como aquellas en las que la palabra que comience por «hab» no pertenezca al verbo «hablar». Y después volver a repetir todo el proceso con el otro nombre...</para>
69
 
 
70
 
<para
71
 
>Con las expresiones regulares, esta tarea se puede acometer en una sola búsqueda, y con una gran precisión.</para>
72
 
 
73
 
<para
74
 
>Para conseguirlo, las expresiones regulares definen reglas para expresar detalladamente una generalización de la cadena a buscar. Nuestro ejemplo, que podríamos expresar literalmente como: «una línea que comienza por «Henrik» o por «Pernille» (posiblemente después de 4 espacios en blanco o tabuladores) seguido de un espacio en blanco seguido de «hab» y después «laba» o «ló»», se podría expresar con la siguiente expresión regular:</para
75
 
> <para
76
 
><userinput
77
 
>^[ \t]{0,4}(Henrik|Pernille) hab(laba|ló)</userinput
78
 
></para>
79
 
 
80
 
<para
81
 
>El ejemplo anterior muestra los cuatro conceptos principales de las expresiones regulares modernas, veamos:</para>
82
 
 
83
 
<itemizedlist>
84
 
<listitem
85
 
><para
86
 
>Patrones.</para
87
 
></listitem>
88
 
<listitem
89
 
><para
90
 
>Declaraciones.</para
91
 
></listitem>
92
 
<listitem
93
 
><para
94
 
>Cuantificadores.</para
95
 
></listitem>
96
 
<listitem
97
 
><para
98
 
>Retroreferencias</para
99
 
></listitem>
100
 
</itemizedlist>
101
 
 
102
 
<para
103
 
>El circunflejo (<literal
104
 
>^</literal
105
 
>) que se encuentra al principio de la expresión es una declaración, que solo es cierta si el resto de la cadena de búsqueda se encuentra al principio de una línea.</para>
106
 
 
107
 
<para
108
 
>Las cadenas <literal
109
 
>[ \t]</literal
110
 
> y <literal
111
 
>(Henrik|Pernille) hab(laba|ló)</literal
112
 
> son patrones. El primero es una <emphasis
113
 
>clase de caracteres</emphasis
114
 
> que coincide con un espacio en blanco o con un tabulador (horizontal); el otro patrón contiene un primer subpatrón que coincide con <literal
115
 
>Henrik</literal
116
 
> <emphasis
117
 
>o con</emphasis
118
 
> <literal
119
 
>Pernille</literal
120
 
>, después una parte de coincidencia exacta <literal
121
 
> hab</literal
122
 
> y, por último, otro subpatrón que coincide con <literal
123
 
>laba</literal
124
 
> <emphasis
125
 
>o con</emphasis
126
 
> <literal
127
 
>ló</literal
128
 
>.</para>
129
 
 
130
 
<para
131
 
>La cadena <literal
132
 
>{0,4}</literal
133
 
> es un cuantificador que dice «en cualquier lugar desde 0 a 4 caracteres anteriores».</para>
134
 
 
135
 
<para
136
 
>Como el software de expresiones regulares que cuenta con el concepto de <emphasis
137
 
>retroreferencias</emphasis
138
 
> guarda toda la parte coincidente de la cadena así como los subpatrones encerrados entre paréntesis, proporcionando medios para acceder a esas referencias, podemos poner nuestras manos tanto en la cadena coincidente completa (cuando se busca en un texto de un editor por medio de una expresión regular, que normalmente aparece marcada como seleccionada) como en el nombre encontrado o en la última parte del verbo.</para>
139
 
 
140
 
<para
141
 
>Uniendo todo, la expresión coincidirá donde nosotros queramos, y únicamente ahí.</para>
142
 
 
143
 
<para
144
 
>Las siguientes secciones describirán con detalle cómo construir y utilizar patrones, clases de caracteres, declaraciones, cuantificadores y retroreferencias, y la última sección presentará una serie de ejemplo útiles.</para>
145
 
 
146
 
</sect1>
147
 
 
148
 
<sect1 id="regex-patterns">
149
 
 
150
 
<title
151
 
>Patrones</title>
152
 
 
153
 
<para
154
 
>Los patrones constan de cadenas literales y clases de caracteres. Los patrones pueden contener subpatrones, que son patrones colocados entre paréntesis.</para>
155
 
 
156
 
<sect2>
157
 
<title
158
 
>Escape de caracteres</title>
159
 
 
160
 
<para
161
 
>En los patrones, así como en las clases de caracteres, algunos caracteres tienen un significado especial. Para conseguir una coincidencia literal con alguno de esos caracteres, es necesario marcarlos como <emphasis
162
 
>escapados</emphasis
163
 
> para permitir al intérprete de expresiones regulares comprender que esos caracteres deben ser incluidos con su significado literal.</para>
164
 
 
165
 
<para
166
 
>Esto se hace colocando una barra inversa (<literal
167
 
>\</literal
168
 
>) antes del carácter.</para>
169
 
 
170
 
 
171
 
<para
172
 
>El software de expresiones regulares ignorará el escapado de cualquier carácter que no tenga ningún significado especial en el contexto, así que escapar, por ejemplo, «j» (<userinput
173
 
>\j</userinput
174
 
>) no tiene por qué causar problemas. Si tiene dudas sobre cuando un carácter puede tener un significado especial, escápelo con seguridad.</para>
175
 
 
176
 
<para
177
 
>El escapado incluye el propio carácter de la barra inversa. Para poder encontrar una coincidencia de forma literal, debe escribir <userinput
178
 
>\\</userinput
179
 
>.</para>
180
 
 
181
 
</sect2>
182
 
 
183
 
<sect2>
184
 
<title
185
 
>Clases de caracteres y abreviaturas</title>
186
 
 
187
 
<para
188
 
>Una <emphasis
189
 
>clase de caracteres</emphasis
190
 
> es una expresión que coincide con un conjunto de caracteres definido. En las expresiones regulares, las clases de caracteres se definen colocando los caracteres válidos de la clase entre corchetes <literal
191
 
>[]</literal
192
 
>, o utilizando una de las clases abreviadas que se describen a continuación.</para>
193
 
 
194
 
<para
195
 
>Las clases de caracteres sencillas únicamente contienen uno o más caracteres literales, por ejemplo <userinput
196
 
>[abc]</userinput
197
 
> (que coincidirá con las letras «a», «b» o «c») o <userinput
198
 
>[0123456789]</userinput
199
 
> (que coincidirá con cualquiera de los dígitos).</para>
200
 
 
201
 
<para
202
 
>Como las letras y los números tienen un orden lógico, puede abreviarlo utilizando intervalos: <userinput
203
 
>[a-c]</userinput
204
 
> es igual a <userinput
205
 
>[abc]</userinput
206
 
> y <userinput
207
 
>[0-9]</userinput
208
 
> es igual a <userinput
209
 
>[0123456789]</userinput
210
 
>. Combinando estas formaciones, por ejemplo <userinput
211
 
>[a-fynot1-38]</userinput
212
 
> resulta completamente válido (esta última debería coincidir con cualquier de los caracteres o dígitos «a»,«b»,«c»,«d», «e»,«f»,«y»,«n»,«o»,«t», «1»,«2»,«3» o «8»).</para>
213
 
 
214
 
<para
215
 
>Como las letras mayúsculas son diferentes caracteres que sus equivalentes minúsculas, para crear una clase de caracteres que sea independiente del formato de las letras, deberá escribir <userinput
216
 
>[aAbB]</userinput
217
 
>.</para>
218
 
 
219
 
<para
220
 
>También es posible crear una clase «negativa» para que se haga coincidir «todo menos». Para hacerlo incluya un circunflejo (<literal
221
 
>^</literal
222
 
>) al principio de la clase: </para>
223
 
 
224
 
<para
225
 
><userinput
226
 
>[^abc]</userinput
227
 
> coincidirá con cualquier carácter <emphasis
228
 
>salvo con</emphasis
229
 
> «a», «b» o «c».</para>
230
 
 
231
 
<para
232
 
>Además de los caracteres literales, hay algunas abreviaturas definidas, para facilitar un poco las cosas: <variablelist>
233
 
 
234
 
<varlistentry>
235
 
<term
236
 
><userinput
237
 
>\a</userinput
238
 
></term>
239
 
<listitem
240
 
><para
241
 
>Coincide con el carácter <acronym
242
 
>ASCII</acronym
243
 
> de la campanilla (BEL, 0x07).</para
244
 
></listitem>
245
 
</varlistentry>
246
 
 
247
 
<varlistentry>
248
 
<term
249
 
><userinput
250
 
>\f</userinput
251
 
></term>
252
 
<listitem
253
 
><para
254
 
>Coincide con el carácter <acronym
255
 
>ASCII</acronym
256
 
> del salto de página (FF, 0x0C).</para
257
 
></listitem>
258
 
</varlistentry>
259
 
 
260
 
<varlistentry>
261
 
<term
262
 
><userinput
263
 
>\n</userinput
264
 
></term>
265
 
<listitem
266
 
><para
267
 
>Coincide con el carácter <acronym
268
 
>ASCII</acronym
269
 
> de salto de línea (LF, 0x0A, nueva línea en Unix).</para
270
 
></listitem>
271
 
</varlistentry>
272
 
 
273
 
<varlistentry>
274
 
<term
275
 
><userinput
276
 
>\r</userinput
277
 
></term>
278
 
<listitem
279
 
><para
280
 
>Coincide con el carácter <acronym
281
 
>ASCII</acronym
282
 
> de retorno de carro (CR, 0x0D).</para
283
 
></listitem>
284
 
</varlistentry>
285
 
 
286
 
<varlistentry>
287
 
<term
288
 
><userinput
289
 
>\t</userinput
290
 
></term>
291
 
<listitem
292
 
><para
293
 
>Coincide con el carácter <acronym
294
 
>ASCII</acronym
295
 
> del tabulador horizontal (HT, 0x09).</para
296
 
></listitem>
297
 
</varlistentry>
298
 
 
299
 
<varlistentry>
300
 
<term
301
 
><userinput
302
 
>\v</userinput
303
 
></term>
304
 
<listitem
305
 
><para
306
 
>Coincide con el carácter <acronym
307
 
>ASCII</acronym
308
 
> del tabulador vertical (VT, 0x0B).</para
309
 
></listitem>
310
 
</varlistentry>
311
 
<varlistentry>
312
 
<term
313
 
><userinput
314
 
>\xhhhh</userinput
315
 
></term>
316
 
 
317
 
<listitem
318
 
><para
319
 
>Coincide con el carácter Unicode correspondiente al número hexadecimal hhhh (entre 0x0000 y 0xFFFF). \0ooo (&ie;, \cero ooo) coincide con el carácter <acronym
320
 
>ASCII</acronym
321
 
>/Latin-1 correspondiente al número octal ooo (entre 0 y 0377).</para
322
 
></listitem>
323
 
</varlistentry>
324
 
 
325
 
<varlistentry>
326
 
<term
327
 
><userinput
328
 
>.</userinput
329
 
> (punto)</term>
330
 
<listitem
331
 
><para
332
 
>Coincide con cualquier carácter (incluyendo nueva línea).</para
333
 
></listitem>
334
 
</varlistentry>
335
 
 
336
 
<varlistentry>
337
 
<term
338
 
><userinput
339
 
>\d</userinput
340
 
></term>
341
 
<listitem
342
 
><para
343
 
>Coincide con un dígito. Es igual que <literal
344
 
>[0-9]</literal
345
 
>.</para
346
 
></listitem>
347
 
</varlistentry>
348
 
 
349
 
<varlistentry>
350
 
<term
351
 
><userinput
352
 
>\D</userinput
353
 
></term>
354
 
<listitem
355
 
><para
356
 
>Coincide con un no dígito. Es igual que <literal
357
 
>[^0-9]</literal
358
 
> o <literal
359
 
>[^\d]</literal
360
 
></para
361
 
></listitem>
362
 
</varlistentry>
363
 
 
364
 
<varlistentry>
365
 
<term
366
 
><userinput
367
 
>\s</userinput
368
 
></term>
369
 
<listitem
370
 
><para
371
 
>Coincide con un carácter de espacio en blanco. Prácticamente igual que <literal
372
 
>[\t\n\r]</literal
373
 
></para
374
 
></listitem>
375
 
</varlistentry>
376
 
 
377
 
<varlistentry>
378
 
<term
379
 
><userinput
380
 
>\S</userinput
381
 
></term>
382
 
<listitem
383
 
><para
384
 
>Coincide con un no espacio en blanco. Prácticamente igual que <literal
385
 
>[^\t\r\n]</literal
386
 
>, e igual que <literal
387
 
>[^\s]</literal
388
 
>.</para
389
 
></listitem>
390
 
</varlistentry>
391
 
 
392
 
<varlistentry>
393
 
<term
394
 
><userinput
395
 
>\w</userinput
396
 
></term>
397
 
<listitem
398
 
><para
399
 
>Coincide con cualquier «carácter de una palabra», en este caso cualquier letra o número. Tenga en cuenta que el subrayado (<literal
400
 
>_</literal
401
 
>) no está incluido, a diferencia de las expresiones regulares de perl. Es igual que <literal
402
 
>[a-zA-Z0-9]</literal
403
 
>.</para
404
 
></listitem>
405
 
</varlistentry>
406
 
 
407
 
<varlistentry>
408
 
<term
409
 
><userinput
410
 
>\W</userinput
411
 
></term>
412
 
<listitem
413
 
><para
414
 
>Coincide con cualquier carácter que no sea de una palabra, cualquier cosa menos letras o números. Es igual que <literal
415
 
>[^a-zA-Z0-9]</literal
416
 
> o <literal
417
 
>[^\w]</literal
418
 
>.</para
419
 
></listitem>
420
 
</varlistentry>
421
 
 
422
 
 
423
 
</variablelist>
424
 
 
425
 
</para>
426
 
 
427
 
<para
428
 
>Las clases abreviadas se puede colocar dentro de una clase propia, por ejemplo para hacer coincidir un caracter de una palabra, un espacio en blanco o un punto, puede escribir <userinput
429
 
>[\w \.]</userinput
430
 
>.</para>
431
 
 
432
 
<note
433
 
> <para
434
 
>La notación POSIX de las clases, <userinput
435
 
>[:&lt;class name&gt;:]</userinput
436
 
> no está de momento implementada.</para
437
 
> </note>
438
 
 
439
 
<sect3>
440
 
<title
441
 
>Caracteres con significado especial dentro de las clases de caracteres</title>
442
 
 
443
 
<para
444
 
>Los siguientes caracteres tienen un significado especial dentro de la construcción de clases de caracteres «[]», y es necesario escaparlos para que sean incluidos literalmente en la clase:</para>
445
 
 
446
 
<variablelist>
447
 
<varlistentry>
448
 
<term
449
 
><userinput
450
 
>]</userinput
451
 
></term>
452
 
<listitem
453
 
><para
454
 
>Finaliza la clase de caracteres. Debe estar escapado, salvo que sea el primer caracter de la clase (puede seguir a un circunflejo no escapado).</para
455
 
></listitem>
456
 
</varlistentry>
457
 
<varlistentry>
458
 
<term
459
 
><userinput
460
 
>^</userinput
461
 
> (circunflejo)</term>
462
 
<listitem
463
 
><para
464
 
>Indica que se trata de una clase negativa, si es el primer carácter. Debe estar escapado para buscar una coincidencia literal en el caso de que sea el primer carácter de la clase.</para
465
 
></listitem>
466
 
</varlistentry>
467
 
<varlistentry>
468
 
<term
469
 
><userinput
470
 
>-</userinput
471
 
> (guión)</term>
472
 
<listitem
473
 
><para
474
 
>Indica un intervalo lógico. Debe estar escapado siempre que se busque la coincidencia literal.</para
475
 
></listitem>
476
 
</varlistentry>
477
 
<varlistentry>
478
 
<term
479
 
><userinput
480
 
>\</userinput
481
 
> (barra inversa)</term>
482
 
<listitem
483
 
><para
484
 
>El carácter de escape. Debe estar siempre escapado.</para
485
 
></listitem>
486
 
</varlistentry>
487
 
 
488
 
</variablelist>
489
 
 
490
 
</sect3>
491
 
 
492
 
</sect2>
493
 
 
494
 
<sect2>
495
 
 
496
 
<title
497
 
>Alternativas: coincidencias con «uno de»</title>
498
 
 
499
 
<para
500
 
>Si desea que la coincidencia sea de uno de una serie de patrones, puede separarlos con <literal
501
 
>|</literal
502
 
> (carácter de barra vertical).</para>
503
 
 
504
 
<para
505
 
>Por ejemplo, para encontrar «John» o «Harry», debería utilizar una expresión de la forma <userinput
506
 
>John|Harry</userinput
507
 
>.</para>
508
 
 
509
 
</sect2>
510
 
 
511
 
<sect2>
512
 
 
513
 
<title
514
 
>Subpatrones</title>
515
 
 
516
 
<para
517
 
>Los <emphasis
518
 
>subpatrones</emphasis
519
 
> son patrones colocados entre paréntesis, y tienen varios usos en el mundo de las expresiones regulares.</para>
520
 
 
521
 
<sect3>
522
 
 
523
 
<title
524
 
>Especificación de alternativas</title>
525
 
 
526
 
<para
527
 
>Puede utilizar un subpatrón para agrupar un conjunto de alternativas dentro de un patrón más grande. Las alternativas se separan con el carácter «|» (barra vertical).</para>
528
 
 
529
 
<para
530
 
>Por ejemplo, para buscar la coincidencia de las palabras «int», «float» o «double», se podría utilizar el patrón <userinput
531
 
>int|float|double</userinput
532
 
>. Si únicamente desea encontrar una de ellas en el caso de que vaya seguida de algún tipo de espacio en blanco y después algunas letras, ponga las alternativas dentro de un subpatrón: <userinput
533
 
>(int|float|double)\s+\w+</userinput
534
 
>.</para>
535
 
 
536
 
</sect3>
537
 
 
538
 
<sect3>
539
 
 
540
 
<title
541
 
>Captura del texto coincidente (retroreferencias)</title>
542
 
 
543
 
<para
544
 
>Si desea utilizar una retroreferencia, utilice un subpatrón para que se recuerde la parte deseada del patrón.</para>
545
 
 
546
 
<para
547
 
>Por ejemplo, si desea buscar dos apariciones de la misma palabra separadas por una coma y posiblemente algún espacio en blanco, puede escribir <userinput
548
 
>(\w+),\s*\1</userinput
549
 
>. El subpatrón <literal
550
 
>\w+</literal
551
 
> localizará un conjunto de caracteres de una palabra, y la expresión entera coincidirá si ese conjunto va seguido de una coma, 0 o más espacios en blanco y después un conjunto de caracteres de una palabra igual al primero. (La cadena <literal
552
 
>\1</literal
553
 
> hace referencia al <emphasis
554
 
>primer subpatrón delimitado por paréntesis</emphasis
555
 
>).</para>
556
 
 
557
 
<!-- <para
558
 
>See also <link linkend="backreferences"
559
 
>Back references</link
560
 
>.</para
561
 
> -->
562
 
 
563
 
</sect3>
564
 
 
565
 
<sect3 id="lookahead-assertions">
566
 
<title
567
 
>Declaraciones de anticipación</title>
568
 
 
569
 
<para
570
 
>Una declaración de anticipación es un subpatrón, que comienza por <literal
571
 
>?=</literal
572
 
> o por <literal
573
 
>?!</literal
574
 
>.</para>
575
 
 
576
 
<para
577
 
>Por ejemplo, si quiere buscar la cadena literal «Bill», pero únicamente si no va seguida de « Gates», puede utilizar la expresión: <userinput
578
 
>Bill(?! Gates)</userinput
579
 
>. (Esto coincidiría con «Bill Clinton» y con «Billy el niño», pero ignoraría en silencio las otras coincidencias).</para>
580
 
 
581
 
<para
582
 
>Los subpatrones utilizados en las declaraciones no se capturan.</para>
583
 
 
584
 
<para
585
 
>Consulte también <link linkend="assertions"
586
 
>Declaraciones</link
587
 
>.</para>
588
 
 
589
 
</sect3>
590
 
 
591
 
</sect2>
592
 
 
593
 
<sect2 id="special-characters-in-patterns">
594
 
<title
595
 
>Caracteres con un significado especial dentro de los patrones.</title>
596
 
 
597
 
<para
598
 
>Los siguientes caracteres tienen significado dentro de los patrones, y es necesario escaparlos para una coincidencia literal: <variablelist>
599
 
 
600
 
<varlistentry>
601
 
<term
602
 
><userinput
603
 
>\</userinput
604
 
> (barra inversa)</term>
605
 
<listitem
606
 
><para
607
 
>El carácter de escape.</para
608
 
></listitem>
609
 
</varlistentry>
610
 
 
611
 
<varlistentry>
612
 
<term
613
 
><userinput
614
 
>^</userinput
615
 
> (circunflejo)</term>
616
 
<listitem
617
 
><para
618
 
>Declara el comienzo de la cadena.</para
619
 
></listitem>
620
 
</varlistentry>
621
 
 
622
 
<varlistentry>
623
 
<term
624
 
><userinput
625
 
>$</userinput
626
 
></term>
627
 
<listitem
628
 
><para
629
 
>Declara el fin de la cadena.</para
630
 
></listitem>
631
 
</varlistentry>
632
 
 
633
 
<varlistentry>
634
 
<term
635
 
><userinput
636
 
>()</userinput
637
 
> (paréntesis derecho e izquierdo)</term>
638
 
<listitem
639
 
><para
640
 
>Denotan subpatrones.</para
641
 
></listitem>
642
 
</varlistentry>
643
 
 
644
 
<varlistentry>
645
 
<term
646
 
><userinput
647
 
>{}</userinput
648
 
> (llaves derecha e izquierda)</term>
649
 
<listitem
650
 
><para
651
 
>Denotan cuantificadores numéricos.</para
652
 
></listitem>
653
 
</varlistentry>
654
 
 
655
 
<varlistentry>
656
 
<term
657
 
><userinput
658
 
>[]</userinput
659
 
> (corchetes derecho e izquierdo)</term>
660
 
<listitem
661
 
><para
662
 
>Denotan clases de caracteres.</para
663
 
></listitem>
664
 
</varlistentry>
665
 
 
666
 
<varlistentry>
667
 
<term
668
 
><userinput
669
 
>|</userinput
670
 
> (barra vertical)</term>
671
 
<listitem
672
 
><para
673
 
>O lógico. Separa alternativas.</para
674
 
></listitem>
675
 
</varlistentry>
676
 
 
677
 
<varlistentry>
678
 
<term
679
 
><userinput
680
 
>+</userinput
681
 
> (signo más)</term>
682
 
<listitem
683
 
><para
684
 
>Cuantificador, 1 o más.</para
685
 
></listitem>
686
 
</varlistentry>
687
 
 
688
 
<varlistentry>
689
 
<term
690
 
><userinput
691
 
>*</userinput
692
 
> (asterisco)</term>
693
 
<listitem
694
 
><para
695
 
>Cuantificador, 0 o más.</para
696
 
></listitem>
697
 
</varlistentry>
698
 
 
699
 
<varlistentry>
700
 
<term
701
 
><userinput
702
 
>?</userinput
703
 
> (signo de interrogación)</term>
704
 
<listitem
705
 
><para
706
 
>Carácter opcional. Se puede interpretar como cuantificador, 0 o 1.</para
707
 
></listitem>
708
 
</varlistentry>
709
 
 
710
 
</variablelist>
711
 
 
712
 
</para>
713
 
 
714
 
</sect2>
715
 
 
716
 
</sect1>
717
 
 
718
 
<sect1 id="quantifiers">
719
 
<title
720
 
>Cuantificadores</title>
721
 
 
722
 
<para
723
 
>Los <emphasis
724
 
>cuantificadores</emphasis
725
 
> permiten que una expresión regular coincida con un número o un intervalo de números de cualquier carácter, una clase de caracteres o un subpatrón.</para>
726
 
 
727
 
<para
728
 
>Los cuantificadores se colocan entre llaves (<literal
729
 
>{</literal
730
 
> y <literal
731
 
>}</literal
732
 
>). Tiene la forma general <literal
733
 
>{[apariciones-mínimas][,[apariciones-máximas]]}</literal
734
 
> </para>
735
 
 
736
 
<para
737
 
>Su uso se explica mejor en este ejemplo: <variablelist>
738
 
 
739
 
<varlistentry>
740
 
<term
741
 
><userinput
742
 
>{1}</userinput
743
 
></term>
744
 
<listitem
745
 
><para
746
 
>Exactamente 1 aparición.</para
747
 
></listitem>
748
 
</varlistentry>
749
 
 
750
 
<varlistentry>
751
 
<term
752
 
><userinput
753
 
>{0,1}</userinput
754
 
></term>
755
 
<listitem
756
 
><para
757
 
>Cero o 1 apariciones.</para
758
 
></listitem>
759
 
</varlistentry>
760
 
 
761
 
<varlistentry>
762
 
<term
763
 
><userinput
764
 
>{,1}</userinput
765
 
></term>
766
 
<listitem
767
 
><para
768
 
>Lo mismo, pero con menos trabajo ;)</para
769
 
></listitem>
770
 
</varlistentry>
771
 
 
772
 
<varlistentry>
773
 
<term
774
 
><userinput
775
 
>{5,10}</userinput
776
 
></term>
777
 
<listitem
778
 
><para
779
 
>Como mínimo 5 y como máximo 10 apariciones.</para
780
 
></listitem>
781
 
</varlistentry>
782
 
 
783
 
<varlistentry>
784
 
<term
785
 
><userinput
786
 
>{5,}</userinput
787
 
></term>
788
 
<listitem
789
 
><para
790
 
>Como mínimo 5 apariciones, sin máximo.</para
791
 
></listitem>
792
 
</varlistentry>
793
 
 
794
 
</variablelist>
795
 
 
796
 
</para>
797
 
 
798
 
<para
799
 
>Además, hay algunas abreviaturas: <variablelist>
800
 
 
801
 
<varlistentry>
802
 
<term
803
 
><userinput
804
 
>*</userinput
805
 
> (asterisco)</term>
806
 
<listitem
807
 
><para
808
 
>Similar a <literal
809
 
>{0,}</literal
810
 
>, encuentra cualquier número de apariciones.</para
811
 
></listitem>
812
 
</varlistentry>
813
 
 
814
 
<varlistentry>
815
 
<term
816
 
><userinput
817
 
>+</userinput
818
 
> (signo más)</term>
819
 
<listitem
820
 
><para
821
 
>Similar a <literal
822
 
>{1,}</literal
823
 
>, al menos 1 aparición.</para
824
 
></listitem>
825
 
</varlistentry>
826
 
 
827
 
<varlistentry>
828
 
<term
829
 
><userinput
830
 
>?</userinput
831
 
> (signo de interrogación)</term>
832
 
<listitem
833
 
><para
834
 
>Similar a <literal
835
 
>{0,1}</literal
836
 
>, cero o 1 apariciones.</para
837
 
></listitem>
838
 
</varlistentry>
839
 
 
840
 
</variablelist>
841
 
 
842
 
</para>
843
 
 
844
 
<sect2>
845
 
 
846
 
<title
847
 
>Codicia</title>
848
 
 
849
 
<para
850
 
>Cuando se utilizan cuantificadores sin máximo, de manera predeterminada, las expresiones regulares tratan de coincidir con la mayor parte posible de la cadena buscada, conociéndose este comportamiento como <emphasis
851
 
>voraz</emphasis
852
 
>.</para>
853
 
 
854
 
<para
855
 
>Los procesadores de expresiones regulares modernos, proporcionan los medios para «desactivar la voracidad», aunque en los entornos gráficos depende de lainterfaz el tener acceso a esta característica. Por ejemplo, un diálogo de búsqueda que permita expresiones regulares, podría tener una casilla de comprobación llamada «Coincidencia mínima». Además, podría haber una indicación sobre que el comportamiento predeterminado es el voraz.</para>
856
 
 
857
 
</sect2>
858
 
 
859
 
<sect2>
860
 
<title
861
 
>Ejemplos en contexto</title>
862
 
 
863
 
<para
864
 
>Estos son algunos ejemplos que utilizan cuantificadores:</para>
865
 
 
866
 
<variablelist>
867
 
 
868
 
<varlistentry>
869
 
<term
870
 
><userinput
871
 
>^\d{4,5}\s</userinput
872
 
></term>
873
 
<listitem
874
 
><para
875
 
>Coincide con los dígitos en «1234 ya» y «12345 ahora», pero no con los de «567 once» ni los de «223459 algún lugar».</para
876
 
></listitem>
877
 
</varlistentry>
878
 
 
879
 
<varlistentry>
880
 
<term
881
 
><userinput
882
 
>\s+</userinput
883
 
></term>
884
 
<listitem
885
 
><para
886
 
>Coincide con uno o más espacios en blanco.</para
887
 
></listitem>
888
 
</varlistentry>
889
 
 
890
 
<varlistentry>
891
 
<term
892
 
><userinput
893
 
>(bla){1,}</userinput
894
 
></term>
895
 
<listitem
896
 
><para
897
 
>Coincide con «blablabla» y con el «bla» de «blanco» o «tabla».</para
898
 
></listitem>
899
 
</varlistentry>
900
 
 
901
 
<varlistentry>
902
 
<term
903
 
><userinput
904
 
>/?&gt;</userinput
905
 
></term>
906
 
<listitem
907
 
><para
908
 
>Coincide con «/&gt;» en «&lt;cerrado/&gt;» así como con «&gt;» en «&lt;abierto&gt;».</para
909
 
></listitem>
910
 
</varlistentry>
911
 
 
912
 
</variablelist>
913
 
 
914
 
</sect2>
915
 
 
916
 
</sect1>
917
 
 
918
 
<sect1 id="assertions">
919
 
<title
920
 
>Declaraciones</title>
921
 
 
922
 
<para
923
 
>Las <emphasis
924
 
>declaraciones</emphasis
925
 
> permiten que una expresión regular coincida únicamente bajo una serie de condiciones controladas.</para>
926
 
 
927
 
<para
928
 
>Una declaración no necesita la coincidencia de un carácter, sino que investiga los alrededores en una busca de una posible coincidencia antes de darla por válida. Por ejemplo, la declaración <emphasis
929
 
>límite de palabra</emphasis
930
 
> no intenta encontrar un carácter que no sea de una palabra en oposición a uno que sí lo sea en su posición, en vez de eso trata de asegurarse de que no es un carácter de una palabra. Esto significa que la declaración puede ser válida en el caso de que no haya ningún carácter, &ie; al final de la cadena buscada.</para>
931
 
 
932
 
<para
933
 
>Algunas declaraciones, de hecho, no tienen un patrón con el que coincidir, sino que la parte coincidente de la cadena no será parte del resultado de la coincidencia de la expresión completa.</para>
934
 
 
935
 
<para
936
 
>Las expresiones regulares documentadas aquí admiten las siguientes declaraciones: <variablelist>
937
 
 
938
 
<varlistentry>
939
 
<term
940
 
><userinput
941
 
>^</userinput
942
 
> (circunflejo: el principio de una cadena)</term>
943
 
<listitem
944
 
><para
945
 
>Concuerda con el comienzo de la cadena buscada.</para
946
 
> <para
947
 
>La expresión <userinput
948
 
>^Peter</userinput
949
 
> coincidirá con «Peter» en la cadena «Peter, ¡hola!» pero no en «¡Hola Peter!» </para
950
 
> </listitem>
951
 
</varlistentry>
952
 
 
953
 
<varlistentry>
954
 
<term
955
 
><userinput
956
 
>$</userinput
957
 
> (final de la cadena)</term>
958
 
<listitem
959
 
><para
960
 
>Coincide con el final de la cadena buscada.</para>
961
 
 
962
 
<para
963
 
>La expresión <userinput
964
 
>tú\?$</userinput
965
 
> coincidirá con el final de la cadena «¿No lo has hecho tú?», pero con ninguna parte de «¿Tú no lo has hecho?»</para>
966
 
 
967
 
</listitem>
968
 
</varlistentry>
969
 
 
970
 
<varlistentry>
971
 
<term
972
 
><userinput
973
 
>\b</userinput
974
 
> (límite de palabra</term>
975
 
<listitem
976
 
><para
977
 
>Coincide si hay un carácter de una palabra a un lado y otro que no sea de una palabra al otro.</para>
978
 
<para
979
 
>Esto es muy útil para encontrar el final de las palabras, o ambos extremos para delimitar la palabra entera. La expresión <userinput
980
 
>\ben\b</userinput
981
 
> coincidirá con el «en» separado en la cadena «Estamos en el borde de la ventana», pero no con el «en» de «ventana».</para
982
 
></listitem>
983
 
 
984
 
</varlistentry>
985
 
 
986
 
<varlistentry>
987
 
<term
988
 
><userinput
989
 
>\B</userinput
990
 
> (límite de no palabra)</term>
991
 
<listitem
992
 
><para
993
 
>Coincide con todo lo que «\b» no coincide.</para>
994
 
<para
995
 
>Eso significa que coincidirá, por ejemplo, dentro de las palabras: La expresión <userinput
996
 
>\Ben\B</userinput
997
 
> coincidirá en «ventana» pero no en «entero» o en «estoy en mi casa».</para>
998
 
</listitem>
999
 
</varlistentry>
1000
 
 
1001
 
<varlistentry>
1002
 
<term
1003
 
><userinput
1004
 
>(?=PATRÓN)</userinput
1005
 
> (Anticipación positiva)</term>
1006
 
<listitem
1007
 
><para
1008
 
>Una declaración de anticipación busca la parte de la cadena seguida de una posible coincidencia. La anticipación positiva previene la coincidencia de la cadena si el texto que sigue no corresponde al <emphasis
1009
 
>PATRÓN</emphasis
1010
 
> de la declaración, y el texto que coincide con eso no será incluido en el resultado.</para>
1011
 
<para
1012
 
>La expresión <userinput
1013
 
>util(?=\w)</userinput
1014
 
> coincidirá con «util» en «utilitario» pero no en «Eso es de gran utilidad».</para>
1015
 
</listitem>
1016
 
</varlistentry>
1017
 
 
1018
 
<varlistentry>
1019
 
<term
1020
 
><userinput
1021
 
>(?!PATRÓN)</userinput
1022
 
> (Anticipación negativa)</term>
1023
 
 
1024
 
<listitem
1025
 
><para
1026
 
>La anticipación negativa previene una posible coincidencia si la parte siguiente de la cadena coincide con el <emphasis
1027
 
>PATRÓN</emphasis
1028
 
>.</para>
1029
 
<para
1030
 
>La expresión <userinput
1031
 
>const \w+\b(?!\s*&amp;)</userinput
1032
 
> coincidirá con «const char» en la cadena «const char* foo», mientras que no coincidirá con «const QString» en «const QString&amp; bar», ya que el «&amp;» coincide con el patrón de la declaración de anticipación negativa.</para>
1033
 
</listitem>
1034
 
</varlistentry>
1035
 
 
1036
 
</variablelist>
1037
 
 
1038
 
</para>
1039
 
 
1040
 
</sect1>
1041
 
 
1042
 
<!-- TODO sect1 id="backreferences">
1043
 
 
1044
 
<title
1045
 
>Back References</title>
1046
 
 
1047
 
<para
1048
 
></para>
1049
 
 
1050
 
</sect1 -->
1051
 
 
1052
 
</appendix>