1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
|
<appendix id="regular-expressions">
<appendixinfo>
<authorgroup>
<author>&Anders.Lund; &Anders.Lund.mail;</author>
<othercredit role="translator"><firstname>Marek</firstname><surname>Laane</surname><affiliation><address><email>[email protected]</email></address></affiliation><contrib>Tõlge eesti keelde</contrib></othercredit>
</authorgroup>
</appendixinfo>
<title>Regulaaravaldised</title>
<synopsis>See lisa tutvustab lühidalt, kuid loodetavasti piisavalt
üksikasjalikult <emphasis>regulaaravaldiste</emphasis>
maailma. Siin on dokumenteeritud regulaaravaldisi nii, nagu
neid kasutab &kate;, mis ei ole päris sama ei sellega, kuidas
käsitleb regulaaravaldisi Perl, ega sellega, mida arvab nendest
näiteks <command>grep</command>.</synopsis>
<sect1>
<title>Sissejuhatus</title>
<para><emphasis>Regulaaravaldised</emphasis> 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>
<para>Näide: oletame, et soovid leida tekstist lõigud, mille alguses seisaks nimi <quote>Henrik</quote> või <quote>Pernilla</quote> ja millele järgneks verbi <quote>ütlema</quote> mingi vorm.</para>
<para>Tavalise otsingu puhul alustaksid ilmselt esimese nime <quote>Henrik</quote> otsimisega, millele järgneks <quote>ütle</quote>, näiteks <userinput>Henrik ütle</userinput>, ning sobivuste otsimisel tuleks kõrvale heita need, mis ei seisa lõigu alguses, samuti need, kus <quote>ütle</quote> vasteks ei ole mitte <quote>ütles</quote> või <quote>ütleb</quote>, mis sind huvitavad, vaid midagi muud. Ja siis tuleb seda kõike korrata järgmise nimega...</para>
<para>Regulaaravaldist kasutades saab selle ülesande sooritada üheainsa otsinguga ning märksa täpsemalt.</para>
<para>Selleks määravad regulaaravaldiswed üldistavad, kuid ometi üksikasjalikud reeglid sobiva stringi leidmiseks. Meie näiteks võiks seda sõnades väljendada nii: <quote>Rida, mille alguses seisab kas <quote>Henrik</quote> või <quote>Pernilla</quote> (millele võib järgneda kuni neli tühi- või tabeldusmärki), millele järgneb tühimärk, millele järgneb <quote>ütle</quote>, millele järgneb kas <quote>s</quote> või <quote>b</quote></quote>. Ja regulaaravaldisena näeks see välja nii:</para> <para><userinput>^[ \t]{0,4}(Henrik|Pernilla) ütle(s|b)</userinput></para>
<para>Toodud näites on kasutatud kõiki nelja moodsas regulaaravaldises kasutatavat põhimõtet, nimelt:</para>
<itemizedlist>
<listitem><para>Mustrid</para></listitem>
<listitem><para>Eeldused</para></listitem>
<listitem><para>Kvantorid</para></listitem>
<listitem><para>Tagasiviited</para></listitem>
</itemizedlist>
<para>Avaldist alustav katus (<literal>^</literal>) on eeldus, olles õige ainult juhul, kui järgnev string asub tõesti rea alguses.</para>
<para>Stringid <literal>[ \t]</literal> ja <literal>(Henrik|Pernilla) ütle(s|b)</literal> on mustrid. Esimene on <emphasis>märgiklass</emphasis>, millele vastab kas tühik või (horisontaalne) tabeldusmärk, teine muster sisaldab kõigepealt alammustrit, millele vastab kas <literal>Henrik</literal> <emphasis>või</emphasis> <literal>Pernilla</literal>, seejärel osa, millele vastab täpselt string <literal> ütle</literal>, ning lõpuks alammustrit, millele vastab kas <literal>s</literal> <emphasis>või</emphasis> <literal>b</literal>.</para>
<para>String <literal>{0,4}</literal> on kvantor, mis annab teada <quote>kuskil 0 kuni 4 kaugusel eelmisest</quote>.</para>
<para>Et regulaaravaldise rakendus, mis toetab <emphasis>tagasiviiteid</emphasis>, 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>
<para>Ühtekokku leiab avaldis sobivused sealt ja ainult sealt, kus me seda soovime.</para>
<para>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>
</sect1>
<sect1 id="regex-patterns">
<title>Mustrid</title>
<para>Mustrid koosnevad literaalsetest stringidest ja märgiklassides. Mustrid võivad sisaldada alammustreid, mis kujutavad endast sulgudes antud mustrit.</para>
<sect2>
<title>Paomärgid</title>
<para>Nii mustrites kui märgiklassides on mõnel märgil eritähendus. Neile literaalse sobivuse leidmiseks tuleb nad spetsiaalselt märkida ehk <emphasis>pakku päästa</emphasis>, 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>
<para>Seda tehakse märgi ette längkriipsu asetades (<literal>\</literal>).</para>
<para>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>j</quote> ees (<userinput>\j</userinput>) 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>
<para>Paomärki tasub kasutada mõistagi ka längkriipsu enda korral: kui just seda on vaja otsida-asendada, siis tulebki kirjutada <userinput>\\</userinput>.</para>
</sect2>
<sect2>
<title>Märgiklassid ja lühendid</title>
<para><emphasis>Märgiklass</emphasis> on avaldis, mis sobib teatud määratud märgikogumiga. Regulaaravaldiste puhul defineeritakse märgiklassid klassi kuuluvaid märke nurksulgudesse <literal>[]</literal> asetades või mõnda allpool kirjeldatud lühendatud klassi kasutades.</para>
<para>Lihtsad märgiklassid sisaldavad vaid ühe või enam literaalse märgi, näiteks <userinput>[abc]</userinput> (sobivad tähed <quote>a</quote>, <quote>b</quote> või <quote>c</quote>) või <userinput>[0123456789]</userinput> (sobib iga number).</para>
<para>Kuna tähtedel ja numbritel on loogiline järjekord, võib neid vahemikke määrates ka lühendada: <userinput>[a-c]</userinput> on sama, mis <userinput>[abc]</userinput> ja <userinput>[0-9]</userinput> on sama, mis <userinput>[0123456789]</userinput>. Täiesti võimalik on ka selliseid konstruktsioone kombineerida, näiteks <userinput>[a-fynot1-38]</userinput> (selle vastab mõistagi kas <quote>a</quote>,<quote>b</quote>,<quote>c</quote>,<quote>d</quote>, <quote>e</quote>,<quote>f</quote>,<quote>y</quote>,<quote>n</quote>,<quote>o</quote>,<quote>t</quote>, <quote>1</quote>,<quote>2</quote>,<quote>3</quote> või <quote>8</quote>).</para>
<para>Et suur- ja väiketähti käsitletakse erinevatena, siis tuleb tõstutundetu märgiklassi loomiseks, mis leiaks näiteks <quote>a</quote> ja <quote>b</quote>, kindlasti kirjutada <userinput>[aAbB]</userinput>.</para>
<para>Mõistagi on võimalik luua ka <quote>negatiivseid</quote> märgiklasse, kus sobib <quote>kõik, välja arvatud</quote>. Selleks tuleb klassi algusse asetada katus (<literal>^</literal>): </para>
<para><userinput>[^abc]</userinput> tähendab, et sobib iga märk, <emphasis>välja arvatud</emphasis> <quote>a</quote>, <quote>b</quote> või <quote>c</quote>.</para>
<para>Lisaks literaalsetele sümbolitele on elu ja töö hõlbustamiseks defineeritud ka teatud valik lühendeid: <variablelist>
<varlistentry>
<term><userinput>\a</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> signaalimärk (BEL, 0x07).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\f</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> lehevahetusmärk (FF, 0x0C).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\n</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> reavahetusmärk (LF, 0x0A, Unixis uus rida).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\r</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> kelgu tagastamise märk (CR, 0x0D).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\t</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> horisontaalne tabeldusmärk (HT, 0x09).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\v</userinput></term>
<listitem><para>Sobib <acronym>ASCII</acronym> vertikaalne tabeldusmärk (VT, 0x0B).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\xhhhh</userinput></term>
<listitem><para>Sobib Unicode märk, mis vastab kuueteistkümnendnumbrile hhhh (vahemikus 0x0000 ja 0xFFFF). \0ooo (&ie; \null ooo) sobib <acronym>ASCII</acronym>/Latin-1 sümboliga, mis vastab kaheksandnumbrile 000 (vahemikus 0 ja 0377).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>.</userinput> (punkt)</term>
<listitem><para>Sobib suvaline märk (kaasa arvatud reavahetusmärk).</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\d</userinput></term>
<listitem><para>Sobib arv. Sama, mis <literal>[0-9]</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\D</userinput></term>
<listitem><para>Sobib mitte-arv. Sama , mis <literal>[^0-9]</literal> või <literal>[^\d]</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\s</userinput></term>
<listitem><para>Sobib tühimärk. Praktiliselt sama, mis <literal>[ \t\n\r]</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\S</userinput></term>
<listitem><para>Sobib mitte-tühimärk. Praktiliselt sama, mis <literal>[^ \t\r\n]</literal>, ja sama, mis <literal>[^\s]</literal></para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\w</userinput></term>
<listitem><para>Sobib iga <quote>täheline märk</quote> - antud juhul siis suvaline täht või number. Arvesta, et alakriips <literal>_</literal> nende hulka ei käi erinevalt Perli regulaaravaldistest. Sama, mis <literal>[a-zA-Z0-9]</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\W</userinput></term>
<listitem><para>Sobib iga mittetäheline märk - seega kõik, mis ei ole täht ega number. Sama, mis <literal>[^a-zA-Z0-9]</literal> või <literal>[^\w]</literal>.</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>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>[\w \.]</userinput>.</para>
<note> <para>POSIXi klasside notatsioon <userinput>[:<klassi nimi>:]</userinput> ei ole veel toetatud.</para> </note>
<sect3>
<title>Eritähendusega märgid märgiklassides</title>
<para>Järgmistel märkidel on eritähendus, kui nad esinevad märgiklassi konstruktsiooni <quote>[]</quote> sees ja nad tuleb varustada paomärgiga, et neid võetaks literaalselt:</para>
<variablelist>
<varlistentry>
<term><userinput>]</userinput></term>
<listitem><para>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></listitem>
</varlistentry>
<varlistentry>
<term><userinput>^</userinput> (katus)</term>
<listitem><para>Märgib negatiivset klassi, kui on esimene märk. Kui peab sobima literaalselt, on vajalik paomärk, kui on klassi esimene märk.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>-</userinput> (kriips)</term>
<listitem><para>Märgib loogilist vahemikku. Märgiklassis vajab alati paomärki.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\</userinput> (längkriips)</term>
<listitem><para>Paomärk. Vajab alati paomärki.</para></listitem>
</varlistentry>
</variablelist>
</sect3>
</sect2>
<sect2>
<title>Alternatiivid: sobib <quote>üks valikust</quote></title>
<para>Kui soovid, et leitaks üks mitme alternatiivse mustri seast, võib alternatiivid eraldada vertikaalse kriipsuga <literal>|</literal>.</para>
<para>Näiteks selleks, et leida kas <quote>John</quote> või <quote>Harry</quote>, tuleks kirjutada <userinput>John|Harry</userinput>.</para>
</sect2>
<sect2>
<title>Alammustrid</title>
<para><emphasis>Alammustrid</emphasis> on sulgudesse võetud mustrid, mida saab regulaaravaldistes mitmeti kasutada.</para>
<sect3>
<title>Alternatiivide määramine</title>
<para>Alammustriga saab grupeerida alternatiivide valiku mustris. Alternatiivid tuleb eraldada püstkriipsuga <quote>|</quote>.</para>
<para>Et sobiks näiteks kas või üks sõnadest <quote>int</quote>, <quote>float</quote> or <quote>double</quote>, saab kasutada mustrit <userinput>int|float|double</userinput>. 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>(int|float|double)\s+\w+</userinput>.</para>
</sect3>
<sect3>
<title>Sobiva teksti haaramine (tagasiviited)</title>
<para>Kui soovid kasutada tagasiviidet, tarvita alammustrit, mis jätab meelde mustri soovitud osa.</para>
<para>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>(\w+),\s*\1</userinput>. Alammuster <literal>\w+</literal> 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>\1</literal> viitab <emphasis>esimesele sulgudes alammustrile</emphasis>.)</para>
<!-- <para>See also <link linkend="backreferences">Back references</link>.</para> -->
</sect3>
<sect3 id="lookahead-assertions">
<title>Ettevaatavad eeldused</title>
<para>Ettevaatav eeldus on alammuster, mida alustab kas <literal>?=</literal> või <literal>?!</literal>.</para>
<para>Kui näiteks sobima peab literaalne string <quote>Bill</quote>, aga ainult juhul, kui sellele ei järgne <quote> Gates</quote>, võib kasutada sellist avaldist: <userinput>Bill(?! Gates)</userinput>. See leiab nii väljendid <quote>Bill Clinton</quote> kui ka <quote>Billy the Kid</quote>, aga ingoneerib muid sobivusi.</para>
<para>Eelduseks kasutatud alammustreid ei haarata.</para>
<para>Vaata ka osa <link linkend="assertions">Eeldused</link></para>
</sect3>
</sect2>
<sect2 id="special-characters-in-patterns">
<title>Eritähendusega märgid mustrites</title>
<para>Järgmistel märkidel on eritähendus, kui nad esinevad mustris, ning need tuleb varustada paomärgiga, kui neid peab võtma literaalselt: <variablelist>
<varlistentry>
<term><userinput>\</userinput> (längkriips)</term>
<listitem><para>Paomärk.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>^</userinput> (katus)</term>
<listitem><para>Eeldab stringi algust.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>$</userinput></term>
<listitem><para>Eeldab stringi lõppu.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>()</userinput> (vasak- ja parempoolne sulg)</term>
<listitem><para>Märgib alammustreid.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{}</userinput> (vasak- ja parempoolne looksulg)</term>
<listitem><para>Märgib numbrilisi kvantoreid.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>[]</userinput> (vasak- ja parempoolne nurksulg)</term>
<listitem><para>Märgib märgiklasse.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>|</userinput> (püstkriips)</term>
<listitem><para>Loogiline VÕI. Eraldab alternatiive.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>+</userinput> (plussmärk)</term>
<listitem><para>Kvantor 1 või enam.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>*</userinput> (tärn)</term>
<listitem><para>Kvantor 0 või enam.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>?</userinput> (küsimärk)</term>
<listitem><para>Lisamärk, mida võib tõlgendada kvantorina 0 või 1.</para></listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
<sect1 id="quantifiers">
<title>Kvantorid</title>
<para><emphasis>Kvantorid</emphasis> lasevad regulaaravaldisel leida määratud arvu või arvuvahemiku märke, märgiklasse või alammustreid.</para>
<para>Kvantorid antakse looksulgudes (<literal>{</literal> ja <literal>}</literal>) ning nad esinevad üldistatult kujul <literal>{[minimaalselt-esinemisi][,[maksimaalselt-esinemisi]]}</literal> </para>
<para>Kasutamist selgitab kõige paremini näide: <variablelist>
<varlistentry>
<term><userinput>{1}</userinput></term>
<listitem><para>Täpselt 1 esinemine.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{0,1}</userinput></term>
<listitem><para>Null või 1 esinemine.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{,1}</userinput></term>
<listitem><para>Sama, aga üks märk vähem kirjutada:-)</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{5,10}</userinput></term>
<listitem><para>Vähemalt 5, aga maksimaalselt 10 esinemist.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>{5,}</userinput></term>
<listitem><para>Vähemalt viis esinemist, maksimum puudub.</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>Lisaks saab kasutada mõningaid lühendeid: <variablelist>
<varlistentry>
<term><userinput>*</userinput> (tärn)</term>
<listitem><para>sama, mis <literal>{0,}</literal>, leiab suvalise arvu esnemisi.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>+</userinput> (plussmärk)</term>
<listitem><para>sama, mis <literal>{1,}</literal>, vähemalt 1 esinemine.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>?</userinput> (küsimärk)</term>
<listitem><para>sama, mis <literal>{0,1}</literal>, null või 1 esinemine.</para></listitem>
</varlistentry>
</variablelist>
</para>
<sect2>
<title>Ahnus</title>
<para>Kui kasutada kvantoreid ilma maksimumi määramata, otsib regulaaravaldis vaikimisi otsitavat stringi nii palju, kui vähegi võimalik, mida nimetatakse sageli <emphasis>ahneks</emphasis> käitumiseks.</para>
<para>Tänapäevased regulaaravaldiste rakendused pakuvad vahendeid <quote>ahnuse väljalülitamiseks</quote>, 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>Minimaalne sobivus</quote>, samuti võib see märku anda, kas ahnus on vaikimisi sisse lülitatud või mitte.</para>
</sect2>
<sect2>
<title>Näited</title>
<para>Mõned näited kvantorite kasutamise kohta.</para>
<variablelist>
<varlistentry>
<term><userinput>^\d{4,5}\s</userinput></term>
<listitem><para>Sobivad arvud väljendites <quote>1234 läheb</quote> ja <quote>12345 nüüd</quote>, aga mitte väljendites <quote>567 üksteist</quote> või <quote>223459 kuskil</quote>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\s+</userinput></term>
<listitem><para>Sobib üks või enam tühimärki.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>(bla){1,}</userinput></term>
<listitem><para>Sobivad kõik väljendid <quote>blablabla</quote> ja <quote>bla</quote> väljendites <quote>blaster</quote> või <quote>kõbla</quote>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>/?></userinput></term>
<listitem><para>Sobib <quote>/></quote> väljendis <quote><closeditem/></quote>, samuti <quote>></quote> väljendis <quote><openitem></quote>.</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 id="assertions">
<title>Eeldused</title>
<para><emphasis>Eeldused</emphasis> võimaldavad leida regulaaravaldise sobivuse ainult teatud määratud tingimustel.</para>
<para>Eeldus ei otsi õigupoolest sobivat märki, vaid uurib lähikonnast võimalikke sobivusi, enne kui midagi omaks võtta. Näiteks <emphasis>sõnapiirde</emphasis> 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>
<para>Mõned eeldused ei otsi õigupoolest sobivat mustrit, vaid osa stringi sobivust, mis ei ole terve avaldise sobivuse tulemus.</para>
<para>Siin dokumenteeritud regulaaravaldised toetavad järgmisi eeldusi: <variablelist>
<varlistentry>
<term><userinput>^</userinput> (katus: stringi algus)</term>
<listitem><para>Sobib otsitava stringi algus.</para> <para>Avaldisega <userinput>^Peeter</userinput> sobib <quote>Peeter</quote> stringis <quote>Peeter, he!</quote>, aga mitte stringis <quote>Hei, Peeter!</quote>. </para> </listitem>
</varlistentry>
<varlistentry>
<term><userinput>$</userinput> (stringi lõpp)</term>
<listitem><para>Sobib otsitava stringi lõpp.</para>
<para>Avaldisega <userinput>ju\?$</userinput> sobib stringi <quote>Sa ei teinud seda, eks ju?</quote>, aga mitte stringi <quote>Sa ei teinud seda, eks?</quote> lõpp.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>\b</userinput> (sõnapiire)</term>
<listitem><para>Sobib, kui ühel pool on täheline märk ja teisel pool mittetäheline märk.</para>
<para>Sellest on abi konkreetsete sõnade leidmisel, eriti kui näiteks määrata kogu sõna sobivus. Avaldisega <userinput>\bjuures\b</userinput> sobib eraldiseisva sõnaga <quote>juures</quote> näiteks lauses <quote>Ta seisis akna juures vaikides</quote>, aga mitte näiteks sõnas <quote>juurestik</quote>.</para></listitem>
</varlistentry>
<varlistentry>
<term><userinput>\B</userinput> (mitte-sõnapiire)</term>
<listitem><para>Sobib kõikjal, kus <quote>\b</quote> ei sobi.</para>
<para>See tähendab, et sobivus asub sõna sees: avaldisega <userinput>\Bjuures\B</userinput> sobib <quote>alusjuurestik</quote>, aga mitte <quote>juurestik</quote> või <quote>sealjuures</quote>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>(?=MUSTER)</userinput> (positiivne ettevaade)</term>
<listitem><para>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>MUSTRILE</emphasis>, vaid tekstile, mis sellega sobib, mida ei kaasata tulemusse.</para>
<para>Avaldisega <userinput>käsi(?=\w)</userinput> sobib <quote>käsi</quote> stringis <quote>käsitööline</quote>, aga mitte stringis <quote>See on meie neljas käsi!</quote>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>(?!MUSTER)</userinput> (negatiivne ettevaade)</term>
<listitem><para>Negatiivne ettevaade ei näita sobivust, kui otsitavale stringile järgnev osa ei vasta <emphasis>MUSTRILE</emphasis>.</para>
<para>Avaldisega <userinput>const \w+\b(?!\s*&)</userinput> sobib <quote>const char</quote> in the string <quote>const char* foo</quote>, aga mitte <quote>const QString</quote> stringis <quote>const QString& bar</quote>, sest <quote>&</quote> sobib negatiivse ettevaatava eelduse mustriga.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
<!-- TODO sect1 id="backreferences">
<title>Back References</title>
<para></para>
</sect1 -->
</appendix>
|