~ubuntu-branches/ubuntu/precise/kde-l10n-et/precise

« back to all changes in this revision

Viewing changes to docs/kdesdk/kate/regular-expressions.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2012-01-24 20:43:54 UTC
  • mto: This revision was merged to the branch mainline in revision 55.
  • Revision ID: package-import@ubuntu.com-20120124204354-dwhbgzbx5g0fn2eq
Tags: upstream-4.8.0
Import upstream version 4.8.0

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
>Marek</firstname
 
9
><surname
 
10
>Laane</surname
 
11
><affiliation
 
12
><address
 
13
><email
 
14
>bald@starman.ee</email
 
15
></address
 
16
></affiliation
 
17
><contrib
 
18
>Tõlge eesti keelde</contrib
 
19
></othercredit
 
20
 
21
</authorgroup>
 
22
</appendixinfo>
 
23
 
 
24
<title
 
25
>Regulaaravaldised</title>
 
26
 
 
27
<synopsis
 
28
>See lisa tutvustab lühidalt, kuid loodetavasti piisavalt
 
29
üksikasjalikult <emphasis
 
30
>regulaaravaldiste</emphasis>
 
31
maailma. Siin on dokumenteeritud regulaaravaldisi nii, nagu
 
32
neid kasutab &kate;, mis ei ole päris sama ei sellega, kuidas
 
33
käsitleb regulaaravaldisi Perl, ega sellega, mida arvab nendest
 
34
näiteks <command
 
35
>grep</command
 
36
>.</synopsis>
 
37
 
 
38
<sect1>
 
39
 
 
40
<title
 
41
>Sissejuhatus</title>
 
42
 
 
43
<para
 
44
><emphasis
 
45
>Regulaaravaldised</emphasis
 
46
> võimaldavad meil kirjeldada mingi tekstistringi võimalikku sisu moel, millest arvuti aru saab, nii et meil on võimalik otsida tekstist selle stringi võimalikke vasteid ning selleks suutlike rakenduste korral ka vajadusel leitud millegagi asendada.</para>
 
47
 
 
48
<para
 
49
>Näide: oletame, et soovid leida tekstist lõigud, mille alguses seisaks nimi <quote
 
50
>Henrik</quote
 
51
> või <quote
 
52
>Pernilla</quote
 
53
> ja millele järgneks verbi <quote
 
54
>ütlema</quote
 
55
> mingi vorm.</para>
 
56
 
 
57
<para
 
58
>Tavalise otsingu puhul alustaksid ilmselt esimese nime <quote
 
59
>Henrik</quote
 
60
> otsimisega, millele järgneks <quote
 
61
>ütle</quote
 
62
>, näiteks <userinput
 
63
>Henrik ütle</userinput
 
64
>, ning sobivuste otsimisel tuleks kõrvale heita need, mis ei seisa lõigu alguses, samuti need, kus <quote
 
65
>ütle</quote
 
66
> vasteks ei ole mitte <quote
 
67
>ütles</quote
 
68
> või <quote
 
69
>ütleb</quote
 
70
>, mis sind huvitavad, vaid midagi muud. Ja siis tuleb seda kõike korrata järgmise nimega...</para>
 
71
 
 
72
<para
 
73
>Regulaaravaldist kasutades saab selle ülesande sooritada üheainsa otsinguga ning märksa täpsemalt.</para>
 
74
 
 
75
<para
 
76
>Selleks määravad regulaaravaldiswed üldistavad, kuid ometi üksikasjalikud reeglid sobiva stringi leidmiseks. Meie näiteks võiks seda sõnades väljendada nii: <quote
 
77
>Rida, mille alguses seisab kas <quote
 
78
>Henrik</quote
 
79
> või <quote
 
80
>Pernilla</quote
 
81
> (millele võib järgneda kuni neli tühi- või tabeldusmärki), millele järgneb tühimärk, millele järgneb <quote
 
82
>ütle</quote
 
83
>, millele järgneb kas <quote
 
84
>s</quote
 
85
> või <quote
 
86
>b</quote
 
87
></quote
 
88
>. Ja regulaaravaldisena näeks see välja nii:</para
 
89
> <para
 
90
><userinput
 
91
>^[ \t]{0,4}(Henrik|Pernilla) ütle(s|b)</userinput
 
92
></para>
 
93
 
 
94
<para
 
95
>Toodud näites on kasutatud kõiki nelja moodsas regulaaravaldises kasutatavat põhimõtet, nimelt:</para>
 
96
 
 
97
<itemizedlist>
 
98
<listitem
 
99
><para
 
100
>Mustrid</para
 
101
></listitem>
 
102
<listitem
 
103
><para
 
104
>Eeldused</para
 
105
></listitem>
 
106
<listitem
 
107
><para
 
108
>Kvantorid</para
 
109
></listitem>
 
110
<listitem
 
111
><para
 
112
>Tagasiviited</para
 
113
></listitem>
 
114
</itemizedlist>
 
115
 
 
116
<para
 
117
>Avaldist alustav katus (<literal
 
118
>^</literal
 
119
>) on eeldus, olles õige ainult juhul, kui järgnev string asub tõesti rea alguses.</para>
 
120
 
 
121
<para
 
122
>Stringid <literal
 
123
>[ \t]</literal
 
124
> ja <literal
 
125
>(Henrik|Pernilla) ütle(s|b)</literal
 
126
> on mustrid. Esimene on <emphasis
 
127
>märgiklass</emphasis
 
128
>, millele vastab kas tühik või (horisontaalne) tabeldusmärk, teine muster sisaldab kõigepealt alammustrit, millele vastab kas <literal
 
129
>Henrik</literal
 
130
> <emphasis
 
131
>või</emphasis
 
132
> <literal
 
133
>Pernilla</literal
 
134
>, seejärel osa, millele vastab täpselt string <literal
 
135
> ütle</literal
 
136
>, ning lõpuks alammustrit, millele vastab kas <literal
 
137
>s</literal
 
138
> <emphasis
 
139
>või</emphasis
 
140
> <literal
 
141
>b</literal
 
142
>.</para>
 
143
 
 
144
<para
 
145
>String <literal
 
146
>{0,4}</literal
 
147
> on kvantor, mis annab teada <quote
 
148
>kuskil 0 kuni 4 kaugusel eelmisest</quote
 
149
>.</para>
 
150
 
 
151
<para
 
152
>Et regulaaravaldise rakendus, mis toetab <emphasis
 
153
>tagasiviiteid</emphasis
 
154
>, salvestab kogu stringi sobiva osa, samuti sulgudesse võetud alammustrid, võime nii kogu sobivust (regulaaravaldise otsingul redaktoris avatud tekstidokumendis märgitakse see enamasti valituks) või leitud nime või tegusõna viimase osa, mille kohta viited käivad, uuesti tarvitada.</para>
 
155
 
 
156
<para
 
157
>Ühtekokku leiab avaldis sobivused sealt ja ainult sealt, kus me seda soovime.</para>
 
158
 
 
159
<para
 
160
>Järgnevates osades kirjeldame põhjalikumalt, kuidas luua ja kasutada mustreid, märgiklasse, eeldusi, kvantoreid ja tagasiviiteid ning viimases osas pakume ka mõned tulusad näited.</para>
 
161
 
 
162
</sect1>
 
163
 
 
164
<sect1 id="regex-patterns">
 
165
 
 
166
<title
 
167
>Mustrid</title>
 
168
 
 
169
<para
 
170
>Mustrid koosnevad literaalsetest stringidest ja märgiklassides. Mustrid võivad sisaldada alammustreid, mis kujutavad endast sulgudes antud mustrit.</para>
 
171
 
 
172
<sect2>
 
173
<title
 
174
>Paomärgid</title>
 
175
 
 
176
<para
 
177
>Nii mustrites kui märgiklassides on mõnel märgil eritähendus. Neile literaalse sobivuse leidmiseks tuleb nad spetsiaalselt märkida ehk <emphasis
 
178
>pakku päästa</emphasis
 
179
>, et regulaaravaldise rakendus aru saaks, et neid märke tuleb käsitleda mitte metamärkide, vaid just nende märkidena, mida nad inimeste arvates peaksidki tähendama.</para>
 
180
 
 
181
<para
 
182
>Seda tehakse märgi ette längkriipsu asetades (<literal
 
183
>\</literal
 
184
>).</para>
 
185
 
 
186
 
 
187
<para
 
188
>Regulaaravaldise rakendus ignoreerib paomärki, mis seisab sellise märgi ees, millel antud kontekstis ei ole eritähendust: näiteks längkriips võib <quote
 
189
>j</quote
 
190
> ees (<userinput
 
191
>\j</userinput
 
192
>) olla või mitte olla, mingit vahet ei ole. Kui sa ei tea täpselt, kas märgil võib olla eritähendus või mitte, on paomärgi kasutamine igati mõttekas.</para>
 
193
 
 
194
<para
 
195
>Paomärki tasub kasutada mõistagi ka längkriipsu enda korral: kui just seda on vaja otsida-asendada, siis tulebki kirjutada <userinput
 
196
>\\</userinput
 
197
>.</para>
 
198
 
 
199
</sect2>
 
200
 
 
201
<sect2>
 
202
<title
 
203
>Märgiklassid ja lühendid</title>
 
204
 
 
205
<para
 
206
><emphasis
 
207
>Märgiklass</emphasis
 
208
> on avaldis, mis sobib teatud määratud märgikogumiga. Regulaaravaldiste puhul defineeritakse märgiklassid klassi kuuluvaid märke nurksulgudesse <literal
 
209
>[]</literal
 
210
> asetades või mõnda allpool kirjeldatud lühendatud klassi kasutades.</para>
 
211
 
 
212
<para
 
213
>Lihtsad märgiklassid sisaldavad vaid ühe või enam literaalse märgi, näiteks <userinput
 
214
>[abc]</userinput
 
215
> (sobivad tähed <quote
 
216
>a</quote
 
217
>, <quote
 
218
>b</quote
 
219
> või <quote
 
220
>c</quote
 
221
>) või <userinput
 
222
>[0123456789]</userinput
 
223
> (sobib iga number).</para>
 
224
 
 
225
<para
 
226
>Kuna tähtedel ja numbritel on loogiline järjekord, võib neid vahemikke määrates ka lühendada: <userinput
 
227
>[a-c]</userinput
 
228
> on sama, mis <userinput
 
229
>[abc]</userinput
 
230
> ja <userinput
 
231
>[0-9]</userinput
 
232
> on sama, mis <userinput
 
233
>[0123456789]</userinput
 
234
>. Täiesti võimalik on ka selliseid konstruktsioone kombineerida, näiteks <userinput
 
235
>[a-fynot1-38]</userinput
 
236
> (selle vastab mõistagi kas <quote
 
237
>a</quote
 
238
>,<quote
 
239
>b</quote
 
240
>,<quote
 
241
>c</quote
 
242
>,<quote
 
243
>d</quote
 
244
>, <quote
 
245
>e</quote
 
246
>,<quote
 
247
>f</quote
 
248
>,<quote
 
249
>y</quote
 
250
>,<quote
 
251
>n</quote
 
252
>,<quote
 
253
>o</quote
 
254
>,<quote
 
255
>t</quote
 
256
>, <quote
 
257
>1</quote
 
258
>,<quote
 
259
>2</quote
 
260
>,<quote
 
261
>3</quote
 
262
> või <quote
 
263
>8</quote
 
264
>).</para>
 
265
 
 
266
<para
 
267
>Et suur- ja väiketähti käsitletakse erinevatena, siis tuleb tõstutundetu märgiklassi loomiseks, mis leiaks näiteks <quote
 
268
>a</quote
 
269
> ja <quote
 
270
>b</quote
 
271
>, kindlasti kirjutada <userinput
 
272
>[aAbB]</userinput
 
273
>.</para>
 
274
 
 
275
<para
 
276
>Mõistagi on võimalik luua ka <quote
 
277
>negatiivseid</quote
 
278
> märgiklasse, kus sobib <quote
 
279
>kõik, välja arvatud</quote
 
280
>. Selleks tuleb klassi algusse asetada katus (<literal
 
281
>^</literal
 
282
>): </para>
 
283
 
 
284
<para
 
285
><userinput
 
286
>[^abc]</userinput
 
287
> tähendab, et sobib iga märk, <emphasis
 
288
>välja arvatud</emphasis
 
289
> <quote
 
290
>a</quote
 
291
>, <quote
 
292
>b</quote
 
293
> või <quote
 
294
>c</quote
 
295
>.</para>
 
296
 
 
297
<para
 
298
>Lisaks literaalsetele sümbolitele on elu ja töö hõlbustamiseks defineeritud ka teatud valik lühendeid: <variablelist>
 
299
 
 
300
<varlistentry>
 
301
<term
 
302
><userinput
 
303
>\a</userinput
 
304
></term>
 
305
<listitem
 
306
><para
 
307
>Sobib <acronym
 
308
>ASCII</acronym
 
309
> signaalimärk (BEL, 0x07).</para
 
310
></listitem>
 
311
</varlistentry>
 
312
 
 
313
<varlistentry>
 
314
<term
 
315
><userinput
 
316
>\f</userinput
 
317
></term>
 
318
<listitem
 
319
><para
 
320
>Sobib <acronym
 
321
>ASCII</acronym
 
322
> lehevahetusmärk (FF, 0x0C).</para
 
323
></listitem>
 
324
</varlistentry>
 
325
 
 
326
<varlistentry>
 
327
<term
 
328
><userinput
 
329
>\n</userinput
 
330
></term>
 
331
<listitem
 
332
><para
 
333
>Sobib <acronym
 
334
>ASCII</acronym
 
335
> reavahetusmärk (LF, 0x0A, Unixis uus rida).</para
 
336
></listitem>
 
337
</varlistentry>
 
338
 
 
339
<varlistentry>
 
340
<term
 
341
><userinput
 
342
>\r</userinput
 
343
></term>
 
344
<listitem
 
345
><para
 
346
>Sobib <acronym
 
347
>ASCII</acronym
 
348
> kelgu tagastamise märk (CR, 0x0D).</para
 
349
></listitem>
 
350
</varlistentry>
 
351
 
 
352
<varlistentry>
 
353
<term
 
354
><userinput
 
355
>\t</userinput
 
356
></term>
 
357
<listitem
 
358
><para
 
359
>Sobib <acronym
 
360
>ASCII</acronym
 
361
> horisontaalne tabeldusmärk (HT, 0x09).</para
 
362
></listitem>
 
363
</varlistentry>
 
364
 
 
365
<varlistentry>
 
366
<term
 
367
><userinput
 
368
>\v</userinput
 
369
></term>
 
370
<listitem
 
371
><para
 
372
>Sobib <acronym
 
373
>ASCII</acronym
 
374
> vertikaalne tabeldusmärk (VT, 0x0B).</para
 
375
></listitem>
 
376
</varlistentry>
 
377
<varlistentry>
 
378
<term
 
379
><userinput
 
380
>\xhhhh</userinput
 
381
></term>
 
382
 
 
383
<listitem
 
384
><para
 
385
>Sobib Unicode märk, mis vastab kuueteistkümnendnumbrile hhhh (vahemikus 0x0000 ja 0xFFFF). \0ooo (&ie; \null ooo) sobib <acronym
 
386
>ASCII</acronym
 
387
>/Latin-1 sümboliga, mis vastab kaheksandnumbrile 000 (vahemikus 0 ja 0377).</para
 
388
></listitem>
 
389
</varlistentry>
 
390
 
 
391
<varlistentry>
 
392
<term
 
393
><userinput
 
394
>.</userinput
 
395
> (punkt)</term>
 
396
<listitem
 
397
><para
 
398
>Sobib suvaline märk (kaasa arvatud reavahetusmärk).</para
 
399
></listitem>
 
400
</varlistentry>
 
401
 
 
402
<varlistentry>
 
403
<term
 
404
><userinput
 
405
>\d</userinput
 
406
></term>
 
407
<listitem
 
408
><para
 
409
>Sobib arv. Sama, mis <literal
 
410
>[0-9]</literal
 
411
>.</para
 
412
></listitem>
 
413
</varlistentry>
 
414
 
 
415
<varlistentry>
 
416
<term
 
417
><userinput
 
418
>\D</userinput
 
419
></term>
 
420
<listitem
 
421
><para
 
422
>Sobib mitte-arv. Sama , mis <literal
 
423
>[^0-9]</literal
 
424
> või <literal
 
425
>[^\d]</literal
 
426
>.</para
 
427
></listitem>
 
428
</varlistentry>
 
429
 
 
430
<varlistentry>
 
431
<term
 
432
><userinput
 
433
>\s</userinput
 
434
></term>
 
435
<listitem
 
436
><para
 
437
>Sobib tühimärk. Praktiliselt sama, mis <literal
 
438
>[ \t\n\r]</literal
 
439
>.</para
 
440
></listitem>
 
441
</varlistentry>
 
442
 
 
443
<varlistentry>
 
444
<term
 
445
><userinput
 
446
>\S</userinput
 
447
></term>
 
448
<listitem
 
449
><para
 
450
>Sobib mitte-tühimärk. Praktiliselt sama, mis <literal
 
451
>[^ \t\r\n]</literal
 
452
>, ja sama, mis <literal
 
453
>[^\s]</literal
 
454
></para
 
455
></listitem>
 
456
</varlistentry>
 
457
 
 
458
<varlistentry>
 
459
<term
 
460
><userinput
 
461
>\w</userinput
 
462
></term>
 
463
<listitem
 
464
><para
 
465
>Sobib iga <quote
 
466
>täheline märk</quote
 
467
> - antud juhul siis suvaline täht või number. Arvesta, et alakriips <literal
 
468
>_</literal
 
469
> nende hulka ei käi erinevalt Perli regulaaravaldistest. Sama, mis <literal
 
470
>[a-zA-Z0-9]</literal
 
471
>.</para
 
472
></listitem>
 
473
</varlistentry>
 
474
 
 
475
<varlistentry>
 
476
<term
 
477
><userinput
 
478
>\W</userinput
 
479
></term>
 
480
<listitem
 
481
><para
 
482
>Sobib iga mittetäheline märk - seega kõik, mis ei ole täht ega number. Sama, mis <literal
 
483
>[^a-zA-Z0-9]</literal
 
484
> või <literal
 
485
>[^\w]</literal
 
486
>.</para
 
487
></listitem>
 
488
</varlistentry>
 
489
 
 
490
 
 
491
</variablelist>
 
492
 
 
493
</para>
 
494
 
 
495
<para
 
496
>Lühendatud klasse võib asetada tavalise klassi sisse, näiteks tähelise märgi, tühiku või punkti leidmiseks võib kirjutada <userinput
 
497
>[\w \.]</userinput
 
498
>.</para
 
499
 
500
 
 
501
<note
 
502
> <para
 
503
>POSIXi klasside notatsioon <userinput
 
504
>[:&lt;klassi nimi&gt;:]</userinput
 
505
> ei ole veel toetatud.</para
 
506
> </note>
 
507
 
 
508
<sect3>
 
509
<title
 
510
>Eritähendusega märgid märgiklassides</title>
 
511
 
 
512
<para
 
513
>Järgmistel märkidel on eritähendus, kui nad esinevad märgiklassi konstruktsiooni <quote
 
514
>[]</quote
 
515
> sees ja nad tuleb varustada paomärgiga, et neid võetaks literaalselt:</para>
 
516
 
 
517
<variablelist>
 
518
<varlistentry>
 
519
<term
 
520
><userinput
 
521
>]</userinput
 
522
></term>
 
523
<listitem
 
524
><para
 
525
>Märgiklassi lõpp. Vajalik on paomärk, kui see pole klassi kõige esimene märk (millele võib järgneda paomärgita katus).</para
 
526
></listitem>
 
527
</varlistentry>
 
528
<varlistentry>
 
529
<term
 
530
><userinput
 
531
>^</userinput
 
532
> (katus)</term>
 
533
<listitem
 
534
><para
 
535
>Märgib negatiivset klassi, kui on esimene märk. Kui peab sobima literaalselt, on vajalik paomärk, kui on klassi esimene märk.</para
 
536
></listitem
 
537
 
538
</varlistentry>
 
539
<varlistentry>
 
540
<term
 
541
><userinput
 
542
>-</userinput
 
543
> (kriips)</term>
 
544
<listitem
 
545
><para
 
546
>Märgib loogilist vahemikku. Märgiklassis vajab alati paomärki.</para
 
547
></listitem>
 
548
</varlistentry>
 
549
<varlistentry>
 
550
<term
 
551
><userinput
 
552
>\</userinput
 
553
> (längkriips)</term>
 
554
<listitem
 
555
><para
 
556
>Paomärk. Vajab alati paomärki.</para
 
557
></listitem>
 
558
</varlistentry>
 
559
 
 
560
</variablelist>
 
561
 
 
562
</sect3>
 
563
 
 
564
</sect2>
 
565
 
 
566
<sect2>
 
567
 
 
568
<title
 
569
>Alternatiivid: sobib <quote
 
570
>üks valikust</quote
 
571
></title>
 
572
 
 
573
<para
 
574
>Kui soovid, et leitaks üks mitme alternatiivse mustri seast, võib alternatiivid eraldada vertikaalse kriipsuga <literal
 
575
>|</literal
 
576
>.</para>
 
577
 
 
578
<para
 
579
>Näiteks selleks, et leida kas <quote
 
580
>John</quote
 
581
> või <quote
 
582
>Harry</quote
 
583
>, tuleks kirjutada <userinput
 
584
>John|Harry</userinput
 
585
>.</para>
 
586
 
 
587
</sect2>
 
588
 
 
589
<sect2>
 
590
 
 
591
<title
 
592
>Alammustrid</title>
 
593
 
 
594
<para
 
595
><emphasis
 
596
>Alammustrid</emphasis
 
597
> on sulgudesse võetud mustrid, mida saab regulaaravaldistes mitmeti kasutada.</para>
 
598
 
 
599
<sect3>
 
600
 
 
601
<title
 
602
>Alternatiivide määramine</title>
 
603
 
 
604
<para
 
605
>Alammustriga saab grupeerida alternatiivide valiku mustris. Alternatiivid tuleb eraldada püstkriipsuga <quote
 
606
>|</quote
 
607
>.</para>
 
608
 
 
609
<para
 
610
>Et sobiks näiteks kas või üks sõnadest <quote
 
611
>int</quote
 
612
>, <quote
 
613
>float</quote
 
614
> or <quote
 
615
>double</quote
 
616
>, saab kasutada mustrit <userinput
 
617
>int|float|double</userinput
 
618
>. Kui soovid leida aga neist ühe vaid juhul, kui sellele järgneb üks või enam tühimärki ja siis veel mingid tähed, anna alternatiivid alammustrina: <userinput
 
619
>(int|float|double)\s+\w+</userinput
 
620
>.</para>
 
621
 
 
622
</sect3>
 
623
 
 
624
<sect3>
 
625
 
 
626
<title
 
627
>Sobiva teksti haaramine (tagasiviited)</title>
 
628
 
 
629
<para
 
630
>Kui soovid kasutada tagasiviidet, tarvita alammustrit, mis jätab meelde mustri soovitud osa.</para>
 
631
 
 
632
<para
 
633
>Kui näiteks soovid leida ühe ja sama sõna kaks esinemist, mida eraldab koma ja võib-olla mõned tühimärgid, võid kirjutada <userinput
 
634
>(\w+),\s*\1</userinput
 
635
>. Alammuster <literal
 
636
>\w+</literal
 
637
> leiab täheliste märkide kogumi ning kogu avaldis sobib siis, kui sellele järgneb koma, 0 või enam tühimärki ja siis uuesti samasugune täheliste märkide kogum. (String <literal
 
638
>\1</literal
 
639
> viitab <emphasis
 
640
>esimesele sulgudes alammustrile</emphasis
 
641
>.)</para>
 
642
 
 
643
<!-- <para
 
644
>See also <link linkend="backreferences"
 
645
>Back references</link
 
646
>.</para
 
647
> -->
 
648
 
 
649
</sect3>
 
650
 
 
651
<sect3 id="lookahead-assertions">
 
652
<title
 
653
>Ettevaatavad eeldused</title>
 
654
 
 
655
<para
 
656
>Ettevaatav eeldus on alammuster, mida alustab kas <literal
 
657
>?=</literal
 
658
> või <literal
 
659
>?!</literal
 
660
>.</para>
 
661
 
 
662
<para
 
663
>Kui näiteks sobima peab literaalne string <quote
 
664
>Bill</quote
 
665
>, aga ainult juhul, kui sellele ei järgne <quote
 
666
> Gates</quote
 
667
>, võib kasutada sellist avaldist: <userinput
 
668
>Bill(?! Gates)</userinput
 
669
>. See leiab nii väljendid <quote
 
670
>Bill Clinton</quote
 
671
> kui ka <quote
 
672
>Billy the Kid</quote
 
673
>, aga ingoneerib muid sobivusi.</para>
 
674
 
 
675
<para
 
676
>Eelduseks kasutatud alammustreid ei haarata.</para>
 
677
 
 
678
<para
 
679
>Vaata ka osa <link linkend="assertions"
 
680
>Eeldused</link
 
681
></para>
 
682
 
 
683
</sect3>
 
684
 
 
685
</sect2>
 
686
 
 
687
<sect2 id="special-characters-in-patterns">
 
688
<title
 
689
>Eritähendusega märgid mustrites</title>
 
690
 
 
691
<para
 
692
>Järgmistel märkidel on eritähendus, kui nad esinevad mustris, ning need tuleb varustada paomärgiga, kui neid peab võtma literaalselt: <variablelist>
 
693
 
 
694
<varlistentry>
 
695
<term
 
696
><userinput
 
697
>\</userinput
 
698
> (längkriips)</term>
 
699
<listitem
 
700
><para
 
701
>Paomärk.</para
 
702
></listitem>
 
703
</varlistentry>
 
704
 
 
705
<varlistentry>
 
706
<term
 
707
><userinput
 
708
>^</userinput
 
709
> (katus)</term>
 
710
<listitem
 
711
><para
 
712
>Eeldab stringi algust.</para
 
713
></listitem>
 
714
</varlistentry>
 
715
 
 
716
<varlistentry>
 
717
<term
 
718
><userinput
 
719
>$</userinput
 
720
></term>
 
721
<listitem
 
722
><para
 
723
>Eeldab stringi lõppu.</para
 
724
></listitem>
 
725
</varlistentry>
 
726
 
 
727
<varlistentry>
 
728
<term
 
729
><userinput
 
730
>()</userinput
 
731
> (vasak- ja parempoolne sulg)</term>
 
732
<listitem
 
733
><para
 
734
>Märgib alammustreid.</para
 
735
></listitem>
 
736
</varlistentry>
 
737
 
 
738
<varlistentry>
 
739
<term
 
740
><userinput
 
741
>{}</userinput
 
742
> (vasak- ja parempoolne looksulg)</term>
 
743
<listitem
 
744
><para
 
745
>Märgib numbrilisi kvantoreid.</para
 
746
></listitem>
 
747
</varlistentry>
 
748
 
 
749
<varlistentry>
 
750
<term
 
751
><userinput
 
752
>[]</userinput
 
753
> (vasak- ja parempoolne nurksulg)</term>
 
754
<listitem
 
755
><para
 
756
>Märgib märgiklasse.</para
 
757
></listitem>
 
758
</varlistentry>
 
759
 
 
760
<varlistentry>
 
761
<term
 
762
><userinput
 
763
>|</userinput
 
764
> (püstkriips)</term>
 
765
<listitem
 
766
><para
 
767
>Loogiline VÕI. Eraldab alternatiive.</para
 
768
></listitem>
 
769
</varlistentry>
 
770
 
 
771
<varlistentry>
 
772
<term
 
773
><userinput
 
774
>+</userinput
 
775
> (plussmärk)</term>
 
776
<listitem
 
777
><para
 
778
>Kvantor 1 või enam.</para
 
779
></listitem>
 
780
</varlistentry>
 
781
 
 
782
<varlistentry>
 
783
<term
 
784
><userinput
 
785
>*</userinput
 
786
> (tärn)</term>
 
787
<listitem
 
788
><para
 
789
>Kvantor 0 või enam.</para
 
790
></listitem>
 
791
</varlistentry>
 
792
 
 
793
<varlistentry>
 
794
<term
 
795
><userinput
 
796
>?</userinput
 
797
> (küsimärk)</term>
 
798
<listitem
 
799
><para
 
800
>Lisamärk, mida võib tõlgendada kvantorina 0 või 1.</para
 
801
></listitem>
 
802
</varlistentry>
 
803
 
 
804
</variablelist>
 
805
 
 
806
</para>
 
807
 
 
808
</sect2>
 
809
 
 
810
</sect1>
 
811
 
 
812
<sect1 id="quantifiers">
 
813
<title
 
814
>Kvantorid</title>
 
815
 
 
816
<para
 
817
><emphasis
 
818
>Kvantorid</emphasis
 
819
> lasevad regulaaravaldisel leida määratud arvu või arvuvahemiku märke, märgiklasse või alammustreid.</para>
 
820
 
 
821
<para
 
822
>Kvantorid antakse looksulgudes (<literal
 
823
>{</literal
 
824
> ja <literal
 
825
>}</literal
 
826
>) ning nad esinevad üldistatult kujul <literal
 
827
>{[minimaalselt-esinemisi][,[maksimaalselt-esinemisi]]}</literal
 
828
> </para>
 
829
 
 
830
<para
 
831
>Kasutamist selgitab kõige paremini näide: <variablelist>
 
832
 
 
833
<varlistentry>
 
834
<term
 
835
><userinput
 
836
>{1}</userinput
 
837
></term>
 
838
<listitem
 
839
><para
 
840
>Täpselt 1 esinemine.</para
 
841
></listitem>
 
842
</varlistentry>
 
843
 
 
844
<varlistentry>
 
845
<term
 
846
><userinput
 
847
>{0,1}</userinput
 
848
></term>
 
849
<listitem
 
850
><para
 
851
>Null või 1 esinemine.</para
 
852
></listitem>
 
853
</varlistentry>
 
854
 
 
855
<varlistentry>
 
856
<term
 
857
><userinput
 
858
>{,1}</userinput
 
859
></term>
 
860
<listitem
 
861
><para
 
862
>Sama, aga üks märk vähem kirjutada:-)</para
 
863
></listitem>
 
864
</varlistentry>
 
865
 
 
866
<varlistentry>
 
867
<term
 
868
><userinput
 
869
>{5,10}</userinput
 
870
></term>
 
871
<listitem
 
872
><para
 
873
>Vähemalt 5, aga maksimaalselt 10 esinemist.</para
 
874
></listitem>
 
875
</varlistentry>
 
876
 
 
877
<varlistentry>
 
878
<term
 
879
><userinput
 
880
>{5,}</userinput
 
881
></term>
 
882
<listitem
 
883
><para
 
884
>Vähemalt viis esinemist, maksimum puudub.</para
 
885
></listitem>
 
886
</varlistentry>
 
887
 
 
888
</variablelist>
 
889
 
 
890
</para>
 
891
 
 
892
<para
 
893
>Lisaks saab kasutada mõningaid lühendeid: <variablelist>
 
894
 
 
895
<varlistentry>
 
896
<term
 
897
><userinput
 
898
>*</userinput
 
899
> (tärn)</term>
 
900
<listitem
 
901
><para
 
902
>sama, mis <literal
 
903
>{0,}</literal
 
904
>, leiab suvalise arvu esnemisi.</para
 
905
></listitem>
 
906
</varlistentry>
 
907
 
 
908
<varlistentry>
 
909
<term
 
910
><userinput
 
911
>+</userinput
 
912
> (plussmärk)</term>
 
913
<listitem
 
914
><para
 
915
>sama, mis <literal
 
916
>{1,}</literal
 
917
>, vähemalt 1 esinemine.</para
 
918
></listitem>
 
919
</varlistentry>
 
920
 
 
921
<varlistentry>
 
922
<term
 
923
><userinput
 
924
>?</userinput
 
925
> (küsimärk)</term>
 
926
<listitem
 
927
><para
 
928
>sama, mis <literal
 
929
>{0,1}</literal
 
930
>, null või 1 esinemine.</para
 
931
></listitem>
 
932
</varlistentry>
 
933
 
 
934
</variablelist>
 
935
 
 
936
</para>
 
937
 
 
938
<sect2>
 
939
 
 
940
<title
 
941
>Ahnus</title>
 
942
 
 
943
<para
 
944
>Kui kasutada kvantoreid ilma maksimumi määramata, otsib regulaaravaldis vaikimisi otsitavat stringi nii palju, kui vähegi võimalik, mida nimetatakse sageli <emphasis
 
945
>ahneks</emphasis
 
946
> käitumiseks.</para>
 
947
 
 
948
<para
 
949
>Tänapäevased regulaaravaldiste rakendused pakuvad vahendeid <quote
 
950
>ahnuse väljalülitamiseks</quote
 
951
>, kuigi graafilises keskkonnas on jäänud liidese ülesandeks pakkuda sellist võimalust või mitte. Nii võib näiteks regulaaravaldise võimalusega otsingudialoogis olla märkekast <quote
 
952
>Minimaalne sobivus</quote
 
953
>, samuti võib see märku anda, kas ahnus on vaikimisi sisse lülitatud või mitte.</para>
 
954
 
 
955
</sect2>
 
956
 
 
957
<sect2>
 
958
<title
 
959
>Näited</title>
 
960
 
 
961
<para
 
962
>Mõned näited kvantorite kasutamise kohta.</para>
 
963
 
 
964
<variablelist>
 
965
 
 
966
<varlistentry>
 
967
<term
 
968
><userinput
 
969
>^\d{4,5}\s</userinput
 
970
></term>
 
971
<listitem
 
972
><para
 
973
>Sobivad arvud väljendites <quote
 
974
>1234 läheb</quote
 
975
> ja <quote
 
976
>12345 nüüd</quote
 
977
>, aga mitte väljendites <quote
 
978
>567 üksteist</quote
 
979
> või <quote
 
980
>223459 kuskil</quote
 
981
>.</para
 
982
></listitem>
 
983
</varlistentry>
 
984
 
 
985
<varlistentry>
 
986
<term
 
987
><userinput
 
988
>\s+</userinput
 
989
></term>
 
990
<listitem
 
991
><para
 
992
>Sobib üks või enam tühimärki.</para
 
993
></listitem>
 
994
</varlistentry>
 
995
 
 
996
<varlistentry>
 
997
<term
 
998
><userinput
 
999
>(bla){1,}</userinput
 
1000
></term>
 
1001
<listitem
 
1002
><para
 
1003
>Sobivad kõik väljendid <quote
 
1004
>blablabla</quote
 
1005
> ja <quote
 
1006
>bla</quote
 
1007
> väljendites <quote
 
1008
>blaster</quote
 
1009
> või <quote
 
1010
>kõbla</quote
 
1011
>.</para
 
1012
></listitem>
 
1013
</varlistentry>
 
1014
 
 
1015
<varlistentry>
 
1016
<term
 
1017
><userinput
 
1018
>/?&gt;</userinput
 
1019
></term>
 
1020
<listitem
 
1021
><para
 
1022
>Sobib <quote
 
1023
>/&gt;</quote
 
1024
> väljendis <quote
 
1025
>&lt;closeditem/&gt;</quote
 
1026
>, samuti <quote
 
1027
>&gt;</quote
 
1028
> väljendis <quote
 
1029
>&lt;openitem&gt;</quote
 
1030
>.</para
 
1031
></listitem>
 
1032
</varlistentry>
 
1033
 
 
1034
</variablelist>
 
1035
 
 
1036
</sect2>
 
1037
 
 
1038
</sect1>
 
1039
 
 
1040
<sect1 id="assertions">
 
1041
<title
 
1042
>Eeldused</title>
 
1043
 
 
1044
<para
 
1045
><emphasis
 
1046
>Eeldused</emphasis
 
1047
> võimaldavad leida regulaaravaldise sobivuse ainult teatud määratud tingimustel.</para>
 
1048
 
 
1049
<para
 
1050
>Eeldus ei otsi õigupoolest sobivat märki, vaid uurib lähikonnast võimalikke sobivusi, enne kui midagi omaks võtta. Näiteks <emphasis
 
1051
>sõnapiirde</emphasis
 
1052
> eeldus ei püüa leida mitte antud positsioonis mittetähelist märki, vaid kontrollib, et seal ei oleks tähelist märki. See tähendab, et eeldus sobbi, kui tegemist ei ole märgiga, &ie; tegemist on otsitava stringi alguse ja lõpuga.</para>
 
1053
 
 
1054
<para
 
1055
>Mõned eeldused ei otsi õigupoolest sobivat mustrit, vaid osa stringi sobivust, mis ei ole terve avaldise sobivuse tulemus.</para>
 
1056
 
 
1057
<para
 
1058
>Siin dokumenteeritud regulaaravaldised toetavad järgmisi eeldusi: <variablelist>
 
1059
 
 
1060
<varlistentry
 
1061
 
1062
<term
 
1063
><userinput
 
1064
>^</userinput
 
1065
> (katus: stringi algus)</term
 
1066
 
1067
<listitem
 
1068
><para
 
1069
>Sobib otsitava stringi algus.</para
 
1070
> <para
 
1071
>Avaldisega <userinput
 
1072
>^Peeter</userinput
 
1073
> sobib <quote
 
1074
>Peeter</quote
 
1075
> stringis <quote
 
1076
>Peeter, he!</quote
 
1077
>, aga mitte stringis <quote
 
1078
>Hei, Peeter!</quote
 
1079
>. </para
 
1080
> </listitem>
 
1081
</varlistentry>
 
1082
 
 
1083
<varlistentry>
 
1084
<term
 
1085
><userinput
 
1086
>$</userinput
 
1087
> (stringi lõpp)</term>
 
1088
<listitem
 
1089
><para
 
1090
>Sobib otsitava stringi lõpp.</para>
 
1091
 
 
1092
<para
 
1093
>Avaldisega <userinput
 
1094
>ju\?$</userinput
 
1095
> sobib stringi <quote
 
1096
>Sa ei teinud seda, eks ju?</quote
 
1097
>, aga mitte stringi <quote
 
1098
>Sa ei teinud seda, eks?</quote
 
1099
> lõpp.</para>
 
1100
 
 
1101
</listitem>
 
1102
</varlistentry>
 
1103
 
 
1104
<varlistentry>
 
1105
<term
 
1106
><userinput
 
1107
>\b</userinput
 
1108
> (sõnapiire)</term>
 
1109
<listitem
 
1110
><para
 
1111
>Sobib, kui ühel pool on täheline märk ja teisel pool mittetäheline märk.</para>
 
1112
<para
 
1113
>Sellest on abi konkreetsete sõnade leidmisel, eriti kui näiteks määrata kogu sõna sobivus. Avaldisega <userinput
 
1114
>\bjuures\b</userinput
 
1115
> sobib eraldiseisva sõnaga <quote
 
1116
>juures</quote
 
1117
> näiteks lauses <quote
 
1118
>Ta seisis akna juures vaikides</quote
 
1119
>, aga mitte näiteks sõnas <quote
 
1120
>juurestik</quote
 
1121
>.</para
 
1122
></listitem>
 
1123
 
 
1124
</varlistentry>
 
1125
 
 
1126
<varlistentry>
 
1127
<term
 
1128
><userinput
 
1129
>\B</userinput
 
1130
> (mitte-sõnapiire)</term>
 
1131
<listitem
 
1132
><para
 
1133
>Sobib kõikjal, kus <quote
 
1134
>\b</quote
 
1135
> ei sobi.</para>
 
1136
<para
 
1137
>See tähendab, et sobivus asub sõna sees: avaldisega <userinput
 
1138
>\Bjuures\B</userinput
 
1139
> sobib <quote
 
1140
>alusjuurestik</quote
 
1141
>, aga mitte <quote
 
1142
>juurestik</quote
 
1143
> või <quote
 
1144
>sealjuures</quote
 
1145
>.</para>
 
1146
</listitem>
 
1147
</varlistentry>
 
1148
 
 
1149
<varlistentry>
 
1150
<term
 
1151
><userinput
 
1152
>(?=MUSTER)</userinput
 
1153
> (positiivne ettevaade)</term>
 
1154
<listitem
 
1155
><para
 
1156
>Ettevaatav eeldus uurib sobivuse leidmiseks selle järgnevat stringi. Positiivne ettevaade ei näita sobivust, kui võimalikule sobivusele järgnev tekst ei vasta eelduse <emphasis
 
1157
>MUSTRILE</emphasis
 
1158
>, vaid tekstile, mis sellega sobib, mida ei kaasata tulemusse.</para>
 
1159
<para
 
1160
>Avaldisega <userinput
 
1161
>käsi(?=\w)</userinput
 
1162
> sobib <quote
 
1163
>käsi</quote
 
1164
> stringis <quote
 
1165
>käsitööline</quote
 
1166
>, aga mitte stringis <quote
 
1167
>See on meie neljas käsi!</quote
 
1168
>.</para>
 
1169
</listitem>
 
1170
</varlistentry>
 
1171
 
 
1172
<varlistentry>
 
1173
<term
 
1174
><userinput
 
1175
>(?!MUSTER)</userinput
 
1176
> (negatiivne ettevaade)</term>
 
1177
 
 
1178
<listitem
 
1179
><para
 
1180
>Negatiivne ettevaade ei näita sobivust, kui otsitavale stringile järgnev osa ei vasta <emphasis
 
1181
>MUSTRILE</emphasis
 
1182
>.</para>
 
1183
<para
 
1184
>Avaldisega <userinput
 
1185
>const \w+\b(?!\s*&amp;)</userinput
 
1186
> sobib <quote
 
1187
>const char</quote
 
1188
> in the string <quote
 
1189
>const char* foo</quote
 
1190
>, aga mitte <quote
 
1191
>const QString</quote
 
1192
> stringis <quote
 
1193
>const QString&amp; bar</quote
 
1194
>, sest <quote
 
1195
>&amp;</quote
 
1196
> sobib negatiivse ettevaatava eelduse mustriga.</para>
 
1197
</listitem>
 
1198
</varlistentry>
 
1199
 
 
1200
</variablelist>
 
1201
 
 
1202
</para>
 
1203
 
 
1204
</sect1>
 
1205
 
 
1206
<!-- TODO sect1 id="backreferences">
 
1207
 
 
1208
<title
 
1209
>Back References</title>
 
1210
 
 
1211
<para
 
1212
></para>
 
1213
 
 
1214
</sect1 -->
 
1215
 
 
1216
</appendix>