~ubuntu-branches/ubuntu/raring/kde-l10n-et/raring-proposed

« 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: 2012-01-24 20:43:54 UTC
  • mfrom: (1.12.11)
  • Revision ID: package-import@ubuntu.com-20120124204354-sn1aih0cv15fjhp2
Tags: 4:4.8.0-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
>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 &kappname;, 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
<note
 
501
> <para
 
502
>POSIXi klasside notatsioon <userinput
 
503
>[:&lt;klassi nimi&gt;:]</userinput
 
504
> ei ole veel toetatud.</para
 
505
> </note>
 
506
 
 
507
<sect3>
 
508
<title
 
509
>Eritähendusega märgid märgiklassides</title>
 
510
 
 
511
<para
 
512
>Järgmistel märkidel on eritähendus, kui nad esinevad märgiklassi konstruktsiooni <quote
 
513
>[]</quote
 
514
> sees ja nad tuleb varustada paomärgiga, et neid võetaks literaalselt:</para>
 
515
 
 
516
<variablelist>
 
517
<varlistentry>
 
518
<term
 
519
><userinput
 
520
>]</userinput
 
521
></term>
 
522
<listitem
 
523
><para
 
524
>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
 
525
></listitem>
 
526
</varlistentry>
 
527
<varlistentry>
 
528
<term
 
529
><userinput
 
530
>^</userinput
 
531
> (katus)</term>
 
532
<listitem
 
533
><para
 
534
>Märgib negatiivset klassi, kui on esimene märk. Kui peab sobima literaalselt, on vajalik paomärk, kui on klassi esimene märk.</para
 
535
></listitem>
 
536
</varlistentry>
 
537
<varlistentry>
 
538
<term
 
539
><userinput
 
540
>-</userinput
 
541
> (kriips)</term>
 
542
<listitem
 
543
><para
 
544
>Märgib loogilist vahemikku. Märgiklassis vajab alati paomärki.</para
 
545
></listitem>
 
546
</varlistentry>
 
547
<varlistentry>
 
548
<term
 
549
><userinput
 
550
>\</userinput
 
551
> (längkriips)</term>
 
552
<listitem
 
553
><para
 
554
>Paomärk. Vajab alati paomärki.</para
 
555
></listitem>
 
556
</varlistentry>
 
557
 
 
558
</variablelist>
 
559
 
 
560
</sect3>
 
561
 
 
562
</sect2>
 
563
 
 
564
<sect2>
 
565
 
 
566
<title
 
567
>Alternatiivid: sobib <quote
 
568
>üks valikust</quote
 
569
></title>
 
570
 
 
571
<para
 
572
>Kui soovid, et leitaks üks mitme alternatiivse mustri seast, võib alternatiivid eraldada vertikaalse kriipsuga <literal
 
573
>|</literal
 
574
>.</para>
 
575
 
 
576
<para
 
577
>Näiteks selleks, et leida kas <quote
 
578
>John</quote
 
579
> või <quote
 
580
>Harry</quote
 
581
>, tuleks kirjutada <userinput
 
582
>John|Harry</userinput
 
583
>.</para>
 
584
 
 
585
</sect2>
 
586
 
 
587
<sect2>
 
588
 
 
589
<title
 
590
>Alammustrid</title>
 
591
 
 
592
<para
 
593
><emphasis
 
594
>Alammustrid</emphasis
 
595
> on sulgudesse võetud mustrid, mida saab regulaaravaldistes mitmeti kasutada.</para>
 
596
 
 
597
<sect3>
 
598
 
 
599
<title
 
600
>Alternatiivide määramine</title>
 
601
 
 
602
<para
 
603
>Alammustriga saab grupeerida alternatiivide valiku mustris. Alternatiivid tuleb eraldada püstkriipsuga <quote
 
604
>|</quote
 
605
>.</para>
 
606
 
 
607
<para
 
608
>Et sobiks näiteks kas või üks sõnadest <quote
 
609
>int</quote
 
610
>, <quote
 
611
>float</quote
 
612
> or <quote
 
613
>double</quote
 
614
>, saab kasutada mustrit <userinput
 
615
>int|float|double</userinput
 
616
>. 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
 
617
>(int|float|double)\s+\w+</userinput
 
618
>.</para>
 
619
 
 
620
</sect3>
 
621
 
 
622
<sect3>
 
623
 
 
624
<title
 
625
>Sobiva teksti haaramine (tagasiviited)</title>
 
626
 
 
627
<para
 
628
>Kui soovid kasutada tagasiviidet, tarvita alammustrit, mis jätab meelde mustri soovitud osa.</para>
 
629
 
 
630
<para
 
631
>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
 
632
>(\w+),\s*\1</userinput
 
633
>. Alammuster <literal
 
634
>\w+</literal
 
635
> 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
 
636
>\1</literal
 
637
> viitab <emphasis
 
638
>esimesele sulgudes alammustrile</emphasis
 
639
>.)</para>
 
640
 
 
641
<!-- <para
 
642
>See also <link linkend="backreferences"
 
643
>Back references</link
 
644
>.</para
 
645
> -->
 
646
 
 
647
</sect3>
 
648
 
 
649
<sect3 id="lookahead-assertions">
 
650
<title
 
651
>Ettevaatavad eeldused</title>
 
652
 
 
653
<para
 
654
>Ettevaatav eeldus on alammuster, mida alustab kas <literal
 
655
>?=</literal
 
656
> või <literal
 
657
>?!</literal
 
658
>.</para>
 
659
 
 
660
<para
 
661
>Kui näiteks sobima peab literaalne string <quote
 
662
>Bill</quote
 
663
>, aga ainult juhul, kui sellele ei järgne <quote
 
664
> Gates</quote
 
665
>, võib kasutada sellist avaldist: <userinput
 
666
>Bill(?! Gates)</userinput
 
667
>. See leiab nii väljendid <quote
 
668
>Bill Clinton</quote
 
669
> kui ka <quote
 
670
>Billy the Kid</quote
 
671
>, aga ingoneerib muid sobivusi.</para>
 
672
 
 
673
<para
 
674
>Eelduseks kasutatud alammustreid ei haarata.</para>
 
675
 
 
676
<para
 
677
>Vaata ka osa <link linkend="assertions"
 
678
>Eeldused</link
 
679
></para>
 
680
 
 
681
</sect3>
 
682
 
 
683
</sect2>
 
684
 
 
685
<sect2 id="special-characters-in-patterns">
 
686
<title
 
687
>Eritähendusega märgid mustrites</title>
 
688
 
 
689
<para
 
690
>Järgmistel märkidel on eritähendus, kui nad esinevad mustris, ning need tuleb varustada paomärgiga, kui neid peab võtma literaalselt: <variablelist>
 
691
 
 
692
<varlistentry>
 
693
<term
 
694
><userinput
 
695
>\</userinput
 
696
> (längkriips)</term>
 
697
<listitem
 
698
><para
 
699
>Paomärk.</para
 
700
></listitem>
 
701
</varlistentry>
 
702
 
 
703
<varlistentry>
 
704
<term
 
705
><userinput
 
706
>^</userinput
 
707
> (katus)</term>
 
708
<listitem
 
709
><para
 
710
>Eeldab stringi algust.</para
 
711
></listitem>
 
712
</varlistentry>
 
713
 
 
714
<varlistentry>
 
715
<term
 
716
><userinput
 
717
>$</userinput
 
718
></term>
 
719
<listitem
 
720
><para
 
721
>Eeldab stringi lõppu.</para
 
722
></listitem>
 
723
</varlistentry>
 
724
 
 
725
<varlistentry>
 
726
<term
 
727
><userinput
 
728
>()</userinput
 
729
> (vasak- ja parempoolne sulg)</term>
 
730
<listitem
 
731
><para
 
732
>Märgib alammustreid.</para
 
733
></listitem>
 
734
</varlistentry>
 
735
 
 
736
<varlistentry>
 
737
<term
 
738
><userinput
 
739
>{}</userinput
 
740
> (vasak- ja parempoolne looksulg)</term>
 
741
<listitem
 
742
><para
 
743
>Märgib numbrilisi kvantoreid.</para
 
744
></listitem>
 
745
</varlistentry>
 
746
 
 
747
<varlistentry>
 
748
<term
 
749
><userinput
 
750
>[]</userinput
 
751
> (vasak- ja parempoolne nurksulg)</term>
 
752
<listitem
 
753
><para
 
754
>Märgib märgiklasse.</para
 
755
></listitem>
 
756
</varlistentry>
 
757
 
 
758
<varlistentry>
 
759
<term
 
760
><userinput
 
761
>|</userinput
 
762
> (püstkriips)</term>
 
763
<listitem
 
764
><para
 
765
>Loogiline VÕI. Eraldab alternatiive.</para
 
766
></listitem>
 
767
</varlistentry>
 
768
 
 
769
<varlistentry>
 
770
<term
 
771
><userinput
 
772
>+</userinput
 
773
> (plussmärk)</term>
 
774
<listitem
 
775
><para
 
776
>Kvantor 1 või enam.</para
 
777
></listitem>
 
778
</varlistentry>
 
779
 
 
780
<varlistentry>
 
781
<term
 
782
><userinput
 
783
>*</userinput
 
784
> (tärn)</term>
 
785
<listitem
 
786
><para
 
787
>Kvantor 0 või enam.</para
 
788
></listitem>
 
789
</varlistentry>
 
790
 
 
791
<varlistentry>
 
792
<term
 
793
><userinput
 
794
>?</userinput
 
795
> (küsimärk)</term>
 
796
<listitem
 
797
><para
 
798
>Lisamärk, mida võib tõlgendada kvantorina 0 või 1.</para
 
799
></listitem>
 
800
</varlistentry>
 
801
 
 
802
</variablelist>
 
803
 
 
804
</para>
 
805
 
 
806
</sect2>
 
807
 
 
808
</sect1>
 
809
 
 
810
<sect1 id="quantifiers">
 
811
<title
 
812
>Kvantorid</title>
 
813
 
 
814
<para
 
815
><emphasis
 
816
>Kvantorid</emphasis
 
817
> lasevad regulaaravaldisel leida määratud arvu või arvuvahemiku märke, märgiklasse või alammustreid.</para>
 
818
 
 
819
<para
 
820
>Kvantorid antakse looksulgudes (<literal
 
821
>{</literal
 
822
> ja <literal
 
823
>}</literal
 
824
>) ning nad esinevad üldistatult kujul <literal
 
825
>{[minimaalselt-esinemisi][,[maksimaalselt-esinemisi]]}</literal
 
826
> </para>
 
827
 
 
828
<para
 
829
>Kasutamist selgitab kõige paremini näide: <variablelist>
 
830
 
 
831
<varlistentry>
 
832
<term
 
833
><userinput
 
834
>{1}</userinput
 
835
></term>
 
836
<listitem
 
837
><para
 
838
>Täpselt 1 esinemine.</para
 
839
></listitem>
 
840
</varlistentry>
 
841
 
 
842
<varlistentry>
 
843
<term
 
844
><userinput
 
845
>{0,1}</userinput
 
846
></term>
 
847
<listitem
 
848
><para
 
849
>Null või 1 esinemine.</para
 
850
></listitem>
 
851
</varlistentry>
 
852
 
 
853
<varlistentry>
 
854
<term
 
855
><userinput
 
856
>{,1}</userinput
 
857
></term>
 
858
<listitem
 
859
><para
 
860
>Sama, aga üks märk vähem kirjutada:-)</para
 
861
></listitem>
 
862
</varlistentry>
 
863
 
 
864
<varlistentry>
 
865
<term
 
866
><userinput
 
867
>{5,10}</userinput
 
868
></term>
 
869
<listitem
 
870
><para
 
871
>Vähemalt 5, aga maksimaalselt 10 esinemist.</para
 
872
></listitem>
 
873
</varlistentry>
 
874
 
 
875
<varlistentry>
 
876
<term
 
877
><userinput
 
878
>{5,}</userinput
 
879
></term>
 
880
<listitem
 
881
><para
 
882
>Vähemalt viis esinemist, maksimum puudub.</para
 
883
></listitem>
 
884
</varlistentry>
 
885
 
 
886
</variablelist>
 
887
 
 
888
</para>
 
889
 
 
890
<para
 
891
>Lisaks saab kasutada mõningaid lühendeid: <variablelist>
 
892
 
 
893
<varlistentry>
 
894
<term
 
895
><userinput
 
896
>*</userinput
 
897
> (tärn)</term>
 
898
<listitem
 
899
><para
 
900
>sama, mis <literal
 
901
>{0,}</literal
 
902
>, leiab suvalise arvu esnemisi.</para
 
903
></listitem>
 
904
</varlistentry>
 
905
 
 
906
<varlistentry>
 
907
<term
 
908
><userinput
 
909
>+</userinput
 
910
> (plussmärk)</term>
 
911
<listitem
 
912
><para
 
913
>sama, mis <literal
 
914
>{1,}</literal
 
915
>, vähemalt 1 esinemine.</para
 
916
></listitem>
 
917
</varlistentry>
 
918
 
 
919
<varlistentry>
 
920
<term
 
921
><userinput
 
922
>?</userinput
 
923
> (küsimärk)</term>
 
924
<listitem
 
925
><para
 
926
>sama, mis <literal
 
927
>{0,1}</literal
 
928
>, null või 1 esinemine.</para
 
929
></listitem>
 
930
</varlistentry>
 
931
 
 
932
</variablelist>
 
933
 
 
934
</para>
 
935
 
 
936
<sect2>
 
937
 
 
938
<title
 
939
>Ahnus</title>
 
940
 
 
941
<para
 
942
>Kui kasutada kvantoreid ilma maksimumi määramata, otsib regulaaravaldis vaikimisi otsitavat stringi nii palju, kui vähegi võimalik, mida nimetatakse sageli <emphasis
 
943
>ahneks</emphasis
 
944
> käitumiseks.</para>
 
945
 
 
946
<para
 
947
>Tänapäevased regulaaravaldiste rakendused pakuvad vahendeid <quote
 
948
>ahnuse väljalülitamiseks</quote
 
949
>, 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
 
950
>Minimaalne sobivus</quote
 
951
>, samuti võib see märku anda, kas ahnus on vaikimisi sisse lülitatud või mitte.</para>
 
952
 
 
953
</sect2>
 
954
 
 
955
<sect2>
 
956
<title
 
957
>Näited</title>
 
958
 
 
959
<para
 
960
>Mõned näited kvantorite kasutamise kohta.</para>
 
961
 
 
962
<variablelist>
 
963
 
 
964
<varlistentry>
 
965
<term
 
966
><userinput
 
967
>^\d{4,5}\s</userinput
 
968
></term>
 
969
<listitem
 
970
><para
 
971
>Sobivad arvud väljendites <quote
 
972
>1234 läheb</quote
 
973
> ja <quote
 
974
>12345 nüüd</quote
 
975
>, aga mitte väljendites <quote
 
976
>567 üksteist</quote
 
977
> või <quote
 
978
>223459 kuskil</quote
 
979
>.</para
 
980
></listitem>
 
981
</varlistentry>
 
982
 
 
983
<varlistentry>
 
984
<term
 
985
><userinput
 
986
>\s+</userinput
 
987
></term>
 
988
<listitem
 
989
><para
 
990
>Sobib üks või enam tühimärki.</para
 
991
></listitem>
 
992
</varlistentry>
 
993
 
 
994
<varlistentry>
 
995
<term
 
996
><userinput
 
997
>(bla){1,}</userinput
 
998
></term>
 
999
<listitem
 
1000
><para
 
1001
>Sobivad kõik väljendid <quote
 
1002
>blablabla</quote
 
1003
> ja <quote
 
1004
>bla</quote
 
1005
> väljendites <quote
 
1006
>blaster</quote
 
1007
> või <quote
 
1008
>kõbla</quote
 
1009
>.</para
 
1010
></listitem>
 
1011
</varlistentry>
 
1012
 
 
1013
<varlistentry>
 
1014
<term
 
1015
><userinput
 
1016
>/?&gt;</userinput
 
1017
></term>
 
1018
<listitem
 
1019
><para
 
1020
>Sobib <quote
 
1021
>/&gt;</quote
 
1022
> väljendis <quote
 
1023
>&lt;closeditem/&gt;</quote
 
1024
>, samuti <quote
 
1025
>&gt;</quote
 
1026
> väljendis <quote
 
1027
>&lt;openitem&gt;</quote
 
1028
>.</para
 
1029
></listitem>
 
1030
</varlistentry>
 
1031
 
 
1032
</variablelist>
 
1033
 
 
1034
</sect2>
 
1035
 
 
1036
</sect1>
 
1037
 
 
1038
<sect1 id="assertions">
 
1039
<title
 
1040
>Eeldused</title>
 
1041
 
 
1042
<para
 
1043
><emphasis
 
1044
>Eeldused</emphasis
 
1045
> võimaldavad leida regulaaravaldise sobivuse ainult teatud määratud tingimustel.</para>
 
1046
 
 
1047
<para
 
1048
>Eeldus ei otsi õigupoolest sobivat märki, vaid uurib lähikonnast võimalikke sobivusi, enne kui midagi omaks võtta. Näiteks <emphasis
 
1049
>sõnapiirde</emphasis
 
1050
> 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>
 
1051
 
 
1052
<para
 
1053
>Mõned eeldused ei otsi õigupoolest sobivat mustrit, vaid osa stringi sobivust, mis ei ole terve avaldise sobivuse tulemus.</para>
 
1054
 
 
1055
<para
 
1056
>Siin dokumenteeritud regulaaravaldised toetavad järgmisi eeldusi: <variablelist>
 
1057
 
 
1058
<varlistentry>
 
1059
<term
 
1060
><userinput
 
1061
>^</userinput
 
1062
> (katus: stringi algus)</term>
 
1063
<listitem
 
1064
><para
 
1065
>Sobib otsitava stringi algus.</para
 
1066
> <para
 
1067
>Avaldisega <userinput
 
1068
>^Peeter</userinput
 
1069
> sobib <quote
 
1070
>Peeter</quote
 
1071
> stringis <quote
 
1072
>Peeter, he!</quote
 
1073
>, aga mitte stringis <quote
 
1074
>Hei, Peeter!</quote
 
1075
>. </para
 
1076
> </listitem>
 
1077
</varlistentry>
 
1078
 
 
1079
<varlistentry>
 
1080
<term
 
1081
><userinput
 
1082
>$</userinput
 
1083
> (stringi lõpp)</term>
 
1084
<listitem
 
1085
><para
 
1086
>Sobib otsitava stringi lõpp.</para>
 
1087
 
 
1088
<para
 
1089
>Avaldisega <userinput
 
1090
>ju\?$</userinput
 
1091
> sobib stringi <quote
 
1092
>Sa ei teinud seda, eks ju?</quote
 
1093
>, aga mitte stringi <quote
 
1094
>Sa ei teinud seda, eks?</quote
 
1095
> lõpp.</para>
 
1096
 
 
1097
</listitem>
 
1098
</varlistentry>
 
1099
 
 
1100
<varlistentry>
 
1101
<term
 
1102
><userinput
 
1103
>\b</userinput
 
1104
> (sõnapiire)</term>
 
1105
<listitem
 
1106
><para
 
1107
>Sobib, kui ühel pool on täheline märk ja teisel pool mittetäheline märk.</para>
 
1108
<para
 
1109
>Sellest on abi konkreetsete sõnade leidmisel, eriti kui näiteks määrata kogu sõna sobivus. Avaldisega <userinput
 
1110
>\bjuures\b</userinput
 
1111
> sobib eraldiseisva sõnaga <quote
 
1112
>juures</quote
 
1113
> näiteks lauses <quote
 
1114
>Ta seisis akna juures vaikides</quote
 
1115
>, aga mitte näiteks sõnas <quote
 
1116
>juurestik</quote
 
1117
>.</para
 
1118
></listitem>
 
1119
 
 
1120
</varlistentry>
 
1121
 
 
1122
<varlistentry>
 
1123
<term
 
1124
><userinput
 
1125
>\B</userinput
 
1126
> (mitte-sõnapiire)</term>
 
1127
<listitem
 
1128
><para
 
1129
>Sobib kõikjal, kus <quote
 
1130
>\b</quote
 
1131
> ei sobi.</para>
 
1132
<para
 
1133
>See tähendab, et sobivus asub sõna sees: avaldisega <userinput
 
1134
>\Bjuures\B</userinput
 
1135
> sobib <quote
 
1136
>alusjuurestik</quote
 
1137
>, aga mitte <quote
 
1138
>juurestik</quote
 
1139
> või <quote
 
1140
>sealjuures</quote
 
1141
>.</para>
 
1142
</listitem>
 
1143
</varlistentry>
 
1144
 
 
1145
<varlistentry>
 
1146
<term
 
1147
><userinput
 
1148
>(?=MUSTER)</userinput
 
1149
> (positiivne ettevaade)</term>
 
1150
<listitem
 
1151
><para
 
1152
>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
 
1153
>MUSTRILE</emphasis
 
1154
>, vaid tekstile, mis sellega sobib, mida ei kaasata tulemusse.</para>
 
1155
<para
 
1156
>Avaldisega <userinput
 
1157
>käsi(?=\w)</userinput
 
1158
> sobib <quote
 
1159
>käsi</quote
 
1160
> stringis <quote
 
1161
>käsitööline</quote
 
1162
>, aga mitte stringis <quote
 
1163
>See on meie neljas käsi!</quote
 
1164
>.</para>
 
1165
</listitem>
 
1166
</varlistentry>
 
1167
 
 
1168
<varlistentry>
 
1169
<term
 
1170
><userinput
 
1171
>(?!MUSTER)</userinput
 
1172
> (negatiivne ettevaade)</term>
 
1173
 
 
1174
<listitem
 
1175
><para
 
1176
>Negatiivne ettevaade ei näita sobivust, kui otsitavale stringile järgnev osa ei vasta <emphasis
 
1177
>MUSTRILE</emphasis
 
1178
>.</para>
 
1179
<para
 
1180
>Avaldisega <userinput
 
1181
>const \w+\b(?!\s*&amp;)</userinput
 
1182
> sobib <quote
 
1183
>const char</quote
 
1184
> in the string <quote
 
1185
>const char* foo</quote
 
1186
>, aga mitte <quote
 
1187
>const QString</quote
 
1188
> stringis <quote
 
1189
>const QString&amp; bar</quote
 
1190
>, sest <quote
 
1191
>&amp;</quote
 
1192
> sobib negatiivse ettevaatava eelduse mustriga.</para>
 
1193
</listitem>
 
1194
</varlistentry>
 
1195
 
 
1196
</variablelist>
 
1197
 
 
1198
</para>
 
1199
 
 
1200
</sect1>
 
1201
 
 
1202
<!-- TODO sect1 id="backreferences">
 
1203
 
 
1204
<title
 
1205
>Back References</title>
 
1206
 
 
1207
<para
 
1208
></para>
 
1209
 
 
1210
</sect1 -->
 
1211
 
 
1212
</appendix>