~ubuntu-branches/ubuntu/saucy/kde-l10n-es/saucy-proposed

« back to all changes in this revision

Viewing changes to docs/applications/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>