-
Notifications
You must be signed in to change notification settings - Fork 24
/
pattern.syntax.xml
2083 lines (2050 loc) · 93.7 KB
/
pattern.syntax.xml
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
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 587830d5d261802148a160a59059dd8d76385fd2 Maintainer: nilgun Status: ready -->
<!-- CREDITS: haluk -->
<chapter xml:id="reference.pcre.pattern.syntax" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>PCRE düzenli ifade sözdizimi</title>
<titleabbrev>Şablon Sözdizimi</titleabbrev>
<section xml:id="regexp.introduction">
<title>Giriş</title>
<para>
PCRE tarafından desteklenen düzenli ifadelerin sözdizimi ve anlamları
aşağıda açıklanmıştır. Düzenli ifadeler ayrıca Perl belgelerinde ve pek
çok kitapta bol sayıda örneklerle açıklanmıştır. O'Reilly tarafından
yayınlanan Friedl'ın "Mastering Regular Expressions" kitabı (ISBN
1-56592-257-3) oldukça ayrıntılıdır. Buradaki açıklamalar bir başvuru
kılavuzu niteliğindedir.
</para>
<para>
Bir düzenli ifade eşleştirileceği dizgeye soldan sağa uygulanan bir
şablondur. Çoğu karakter bir şablonun içinde sadece kendilerini ifade
ederler ve şablonun eşleştirildiği dizgedeki karşılıkları ile
eşleşirler. Önemsiz bir örnek olarak <literal>The quick brown
fox</literal> şablonu kendisiyle aynı olan dizgeyle eşleşecektir.
</para>
</section>
<section xml:id="regexp.reference.delimiters">
<title>Ayırıcılar</title>
<para>
PCRE işlevlerini kullanırken şablonların <emphasis>ayırıcılar</emphasis>
arasına alınması gerekir. Ayırıcılar tersbölü imi ve boşluk karakterleri
hariç herhangi bir abecesayısal karakter olabilir. Geçerli bir ayırıcıdan
önceki baştaki boşluklar sessizce yok sayılır.
</para>
<para>
Sıkça kullanılan ayırıcılar şunlardır: Bölü çizgisi
(<literal>/</literal>), diyez imi (<literal>#</literal>) yaklaşık imi
(<literal>~</literal>). Aşağıda, şablonlarda ayırıcı kullanımı ile
örneklere yer verilmiştir.
<informalexample>
<programlisting>
<![CDATA[
/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%
]]>
</programlisting>
</informalexample>
</para>
<para>
Açma ve kapama parantezlerinin sırasıyla başlangıç ve bitiş sınırlayıcısı
olduğu köşeli parantez tarzı sınırlayıcıları da kullanmak mümkündür.
<literal>()</literal>, <literal>{}</literal>, <literal>[]</literal> ve
<literal><></literal> çiftlerinin tümü, geçerli köşeli ayraç tarzı
sınırlayıcı çiftleridir.
<informalexample>
<programlisting>
<![CDATA[
(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
]]>
</programlisting>
</informalexample>
Köşeli ayraç stili sınırlayıcılarının, kalıp içinde meta karakterler
olarak kullanıldıklarında öncelenmesi gerekmez, ancak diğer
sınırlayıcılarda olduğu gibi, değişmez karakterler olarak
kullanıldıklarında bunların da öncelenmesi gerekir.
</para>
<para>
Sınırlayıcının kalıp içinde eşleştirilmesi gerekiyorsa, tersbölü çizgisi
kullanılarak öncelenmesi gerekir. Sınırlayıcı sık sık kalıbın içinde
görünüyorsa, okunabilirliği artırmak için başka bir sınırlayıcı seçmek
daha iyidir.
<informalexample>
<programlisting>
<![CDATA[
/http:\/\//
#http://#
]]>
</programlisting>
</informalexample>
<function>preg_quote</function> işlevi, bir bir kalıba yerleştirmek için
bir dizeyi öncelemekte kullanılabilirve isteğe bağlı ikinci bağımsız değişkeni,
öncelenecek sınırlayıcıyı belirtmek için kullanılabilir.
</para>
<para>
Şablonu sonalndıran ayırıcının ardına bir
<link linkend="reference.pcre.pattern.modifiers">şablon
değiştircisi</link> eklemek de mümkündür. Aşağıda, harf büyüklüğüne
duyarsız eşleşmeyle ilgili bir örnek vardır:
<informalexample>
<programlisting>
<![CDATA[
#[a-z]#i
]]>
</programlisting>
</informalexample>
</para>
</section>
<section xml:id="regexp.reference.meta">
<title>Düzenli ifade İşleçleri</title>
<para>
Düzenli ifadelerin gücü, şablon içinde yinelemeler ve ikameler içerme
yeteneğinden kaynaklanır. Bunlar şablon içinde <emphasis>düzenli ifade
işleçleri</emphasis> adı verilen ve özel bir şekilde yorumlanan ancak
doğrudan kendileriyle eşleşmeyen karakterlerle kodlanırlar.
</para>
<para>
İki ayrı işleç ailesi vardır: Köşeli ayraçların içindekiler ve
dışındakiler. Köşeli ayraçların dışındaki işleçler şunlardır:
<table>
<title>Köşeli ayraçların dışındaki düzenli ifade işleçleri</title>
<tgroup cols="2">
<thead>
<row>
<entry>İşleç</entry><entry>Açıklama</entry>
</row>
</thead>
<tbody>
<row>
<entry>\</entry>
<entry>çeşitli kullanımları olan genel önceleme karakteri</entry>
</row>
<row>
<entry>^</entry>
<entry>konu başlangıcıyla eşleşme işleci (satır kipinde veya çok
satırlı kipte)</entry>
</row>
<row>
<entry>$</entry>
<entry>konu sonuyla eşleşme işleci (satır kipinde veya çok satırlı
kipte)</entry>
</row>
<row>
<entry>.</entry>
<entry>(öntanımlı olarak) satırsonu hariç herhangi bir karakterle
eşleşme işleci</entry>
</row>
<row>
<entry>[</entry>
<entry>Karakter sınıfı tanımı başlatma işleci</entry>
</row>
<row>
<entry>]</entry>
<entry>Karakter sınıfı tanımı bitirme işleci</entry>
</row>
<row>
<entry>|</entry><entry>VEYA işleci</entry>
</row>
<row>
<entry>(</entry><entry>alt kalıp başlatma işleci</entry>
</row>
<row>
<entry>)</entry><entry>alt kalıp bitirme işleci</entry>
</row>
<row>
<entry>?</entry>
<entry>"(" işlecinin anlamını genişletir; 0 veya 1 kere
eşleşir, ayrıca açgözlülüğe son verilir. (bkz. <link
linkend="regexp.reference.repetition">Yineleme</link>)</entry>
</row>
<row>
<entry>*</entry>
<entry>0 veya daha fazlasıyla eşleşme işleci</entry>
</row>
<row>
<entry>+</entry>
<entry>1 veya daha fazlasıyla eşleşme işleci</entry>
</row>
<row>
<entry>{</entry>
<entry>en küçük/en büyük ile eşleşme başlatma işleci</entry>
</row>
<row>
<entry>}</entry>
<entry>en küçük/en büyük ile eşleşme bitirme işleci</entry>
</row>
</tbody>
</tgroup>
</table>
Köşeli ayraçların içinde kalan kısım <link
linkend="regexp.reference.character-classes">karakter sınıfı</link>
adını alır. Bir karakter sınıfı içinde özel anlamı olan işleçler şunlardır:
<table>
<title>Köşeli ayraçların içindeki düzenli ifade işleçleri
(<emphasis>karakter sınıfları</emphasis>)</title>
<tgroup cols="2">
<thead>
<row>
<entry>İşleç</entry><entry>Açıklama</entry>
</row>
</thead>
<tbody>
<row>
<entry>\</entry><entry>genel önceleme karakteri</entry>
</row>
<row>
<entry>^</entry><entry>sınıfın ilk karakteri olduğu takdirde sınıfla
eşleşmeme işleci</entry>
</row>
<row>
<entry>-</entry><entry>karakter aralığı işleci</entry>
</row>
</tbody>
</tgroup>
</table>
Aşağıdaki bölümlerde bu işleçlerin kullanımı ayrı ayrı açıklanmıştır.
</para>
</section>
<section xml:id="regexp.reference.escape">
<title>Önceleme karakteri</title>
<para>
Tersbölü karakterinin çeşitli kullanımları vardır.
<emphasis>Tersbölünün ilk kullanım çeşidinde</emphasis>, bir harfin
veya bir rakamın soluna konmuşsa karakterin özel anlamını kaldırır;
karakter sınıflarının içinde ve dışında bir önceleme karakteri olarak
iş görür.
</para>
<para>
Örneğin, şablonunuzun "*" karakteri ile eşleşmesini isterseniz, şablonu
"\*" biçiminde yazmalısınız. Tersbölü karakterinin öncelediği karakter
bir düzenli ifade işleci olsun ya da olmasın yorumu değişmeyecek, daima
öncelediği karakter kendisiyle eşleşecektir. Sonuç olarak, önceleme
işleci harf veya rakam olmayan karakterlerle de güvenle
kullanılabilmektedir. Özellikle, bir tersbölü karakteri ile eşleşme
sağlamak için "\\" yazmalısınız.
</para>
<note>
<para>
Tek ve çift tırnaklı PHP <link linkend="language.types.string.syntax">
dizeleri</link> içinde tersbölü karakteri özel olarak ele alınır. Bir
\ ile eşleşen \\ düzenli ifadesi, PHP kodu içinde "\\\\" veya '\\\\'
olarak belirtilmelidir.
</para>
</note>
<para>
Bir şablon <link linkend="reference.pcre.pattern.modifiers">
PCRE_EXTENDED</link> seçeneği ile derlenmişse kalıp içindeki (bir
karakter sınıfının dışında kalan) boşluk karakterleri ve bir karakter
sınıfının dışındaki bir "#" karakteri ile sonraki satırsonu karakteri
arasındaki karakterler yok sayılır. Bir boşluk veya "#" karakterini
şablonun parçası haline getirmek için, karakter tersbölü ile öncelenir.
</para>
<para>
<emphasis>Tersbölü karakterinin ikinci kullanımı</emphasis>,
basılamayan karakterleri şablon içinde görünür kılmak içindir. İkil
sıfırın şablonu sonlandırması dışında basılamayan karakterlerin
görünümü ile ilgili bir kısıtlama yoktur. Fakat, bir şablon, bir metni
düzenleyerek hazırlanıyorsa aşağıdaki önceleme dizilimlerini kullanmak,
ifade ettikleri ikil karakterleri kullanmaktan daha kolaydır:
</para>
<para>
<variablelist>
<varlistentry>
<term><emphasis>\a</emphasis></term>
<listitem><simpara>sesli uyarı, yani BEL karakteri (onaltılık 07)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\cx</emphasis></term>
<listitem><simpara>"CTRL-x"; buradaki x yerine herhangi bir
karakter konabilir</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\e</emphasis></term>
<listitem><simpara>kaçış karakteri (onaltılık 1B)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\f</emphasis></term>
<listitem><simpara>sayfa ileri (onaltılık 0C)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\n</emphasis></term>
<listitem><simpara>satırsonu (onaltılık 0A)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\p{xx}</emphasis></term>
<listitem>
<simpara>
xx özellikli bir karakter, daha fazla bilgi için bkz.
<link linkend="regexp.reference.unicode">unicode özellikleri</link>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\P{xx}</emphasis></term>
<listitem>
<simpara>
xx özelliksiz bir karakter, daha fazla bilgi için bkz.
<link linkend="regexp.reference.unicode">unicode özellikleri</link>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\r</emphasis></term>
<listitem><simpara>satırbaşı (onaltılık 0D)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\R</emphasis></term>
<listitem>
<simpara>satırsonu:\n, \r ve \r\n ile eşleşir</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\t</emphasis></term>
<listitem><simpara>sekme (onaltılık 09)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\xhh</emphasis></term>
<listitem>
<simpara>onaltılık kodu hh olan karakter</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\ddd</emphasis></term>
<listitem><simpara>sekizlik kodu ddd olan karakter veya bir geriye
gönderim</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<para>
"<literal>\cx</literal>" diziliminin en hassas etkisi şöyledir:
"<literal>x</literal>" bir küçük harf ise büyük harfe dönüştürülür ve
karakterin 6. biti (onaltılık 40) evrilir. Böylece,
"<literal>\cz</literal>" dizilimi onaltılık 1A haline gelirken
"<literal>\c{</literal>" onaltılık 3B ve "<literal>\c;</literal>"
onaltılık 7B haline gelir.
</para>
<para>
"<literal>\x</literal>" dizilimden sonra en fazla iki onaltılık rakam
okunur (harfler büyük veya küçük olabilir). <emphasis>UTF-8
kipinde</emphasis>, "<literal>\x{...}</literal>" gösterimine izin
verilir; kaşlı ayraçların arasına yazılan onaltılık sayı UTF-8
karakterin kodu olarak yorumlanır. Özgün onaltılık önceleme dizilimi
<literal>\xhh</literal>, eğer karakterin kodu 127'den büyükse iki
baytlık bir UTF-8 karakteri ile eşleşecektir.
</para>
<para>
"<literal>\0</literal>" dizilimden sonra en fazla iki sekizlik rakam
okunur. Her iki durumda da, iki rakamdan azı varsa olanlar kullanılır.
Böylece, "<literal>\0\x\07</literal>" dizilimi iki ikil sıfırdan sonra
bir BEL karakteri olarak yorumlanır. Eğer sekizlik gösterimin hemen
ardından sekizlik rakam olarak yorumlanabilecek bir karakter geliyorsa
ilk sıfırdan sonra mutlaka iki sekizlik rakam kullanın.
</para>
<para>
Tersbölünün hemen ardından 0 haricinde bir rakam gelmesi durumunda durum
biraz karışır. Bir karakter sınıfının dışında, PCRE o rakamı ve diğer
rakamları bir onluk sayı olarak okur. Eğer sayı 10'dan küçükse veya
evvelce belirtilmiş yakalayan alt şablonlar varsa dizilimin tamamı bir
<emphasis>geriye gönderim</emphasis> olarak ele alınır. İkinci durumun
nasıl çalıştığı aşağıda parantezli alt şablonların açıklamasında
anlatılmıştır.
</para>
<para>
Bir karakter sınıfının içinde veya evvelinde yakalayan alt şablonlar
bulunmayan 9'dan büyük bir onluk sayı varlığında PCRE tersbölüden sonra
en fazla üç sekizlik rakam okur ve değerin en önemsiz 8 bitinden tek bir
bayt üretir. Daha sonraki rakamlar karakterlerin kendileri olarak ele
alınır. Örnekler:
</para>
<para>
<variablelist>
<varlistentry>
<term><emphasis>\040</emphasis></term>
<listitem><simpara>Boşluk karakterini ifade etmenin bir başka yolu.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\40</emphasis></term>
<listitem>
<simpara>
40'tan az yakalayan alt şablon varlığında bu da aynısı.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\7</emphasis></term>
<listitem><simpara>Daima geriye gönderim olarak yorumlanır.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\11</emphasis></term>
<listitem>
<simpara>
Duruma göre, bir geriye gönderim olabileceği gibi sekme karakteri
olarak da yorumlanabilir.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\011</emphasis></term>
<listitem><simpara>Daima bir sekme karakteridir</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\0113</emphasis></term>
<listitem><simpara>Sekme karakterinden sonra "3" var.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\113</emphasis></term>
<listitem>
<simpara>
Sekizlik kodu 113 olan karakter (99'dan fazla geriye gönderim
olamayacağı için).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\377</emphasis></term>
<listitem><simpara>Tamamı 1 bitten oluşan bir bayt.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\81</emphasis></term>
<listitem>
<simpara>
Duruma göre, bir geriye gönderim olabileceği gibi ikil sıfırın
ardından gelen "8" ve "1" karakterleri de olabilir.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
100'den büyük sekizlik değerlerin başına sıfır konmamalıdır, çünkü üç
sekizlik rakamdan fazlası sekizlik sayının rakamları olarak ele
alınmamaktadır.
</para>
<para>
Tek bir bayt değerini tanımlayan tüm dizilimler karakter sınıflarının
içinde de dışında da kullanılabilir. Ek olarak, bir karakter sınıfının
içinde, "<literal>\b</literal>" dizilimi bir tersbölü karakteri
(onaltılık 08) olarak yorumlanır. Karakter sınıfının dışında ise anlamı
farklıdır (aşağıya bakınız).
</para>
<para>
<emphasis>Tersbölünün üçüncü kullanımı</emphasis> soysal karakter
türlerini belirtmek içindir:
</para>
<para>
<variablelist>
<varlistentry>
<term><emphasis>\d</emphasis></term>
<listitem><simpara>Herhangi bir onluk rakam</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\D</emphasis></term>
<listitem><simpara>Bir onluk rakam olmayan herhangi bir karakter
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\h</emphasis></term>
<listitem><simpara>Herhangi bir yatay boşluk karakteri</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\H</emphasis></term>
<listitem><simpara>Bir yatay boşluk karakteri olmayan herhangi bir
karakter</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\s</emphasis></term>
<listitem><simpara>Herhangi bir boşluk karakteri</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\S</emphasis></term>
<listitem><simpara>Bir boşluk karakteri olmayan herhangi bir karakter
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\v</emphasis></term>
<listitem><simpara>Herhangi bir düşey boşluk karakteri</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\V</emphasis></term>
<listitem><simpara>Bir düşey boşluk karakteri olmayan herhangi bir
karakter</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\w</emphasis></term>
<listitem><simpara>Herhangi bir "sözcük" karakteri
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\W</emphasis></term>
<listitem><simpara>Bir "sözcük" karakteri olmayan herhangi bir
karakter</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<para>
Her önceleme dizilimi çifti karakter kümesinin tamamını iki ayrı küme
haline getirir. Belirtilen her karakter sadece ve sadece bir çift ile
eşleşir.
</para>
<para>
"Boşluk" karakterleri HT (9), LF (10), FF (12), CR (13) ve boşluktur (32).
Bununla birlikte, yerele özgü eşleştirme gerçekleşiyorsa, 128-255
aralığındaki kodlar sahip karakterler de boşluk karakterleri olarak
kabul edilebilir, örneğin, NBSP (A0).
</para>
<para>
Bir "sözcük" karakteri herhangi bir harf, rakam veya alt çizgi karakteri
olabilir, yani, bir Perl sözcüğünün parçası olabilen her karakter bir
"sözcük" karakteri olabilir. Harflerin ve rakamların tanımı PCRE'nin
karakter tablosu tarafından denetlenir ve eşleştirme yerele özgü
yapılıyorsa bu tanım değişebilir. Örneğin "tr" yerelindeki 128'den büyük
karakter koduna sahip "çğıöşü" gibi karakterler <literal>\w</literal>
ile eşleşir.
</para>
<para>
Karakter türündeki bu dizilimler karakter sınıflarının içinde veya
dışında bulunabilir. Her biri uygun türdeki bir karakterle eşleşir. Eğer
karakter eşleştirmesinde eşleşmeye konu dizgenin sonuna gelinmişse
hiçbir karakter eşleşmeyeceğinden işlem başarısız olacaktır.
</para>
<para>
<emphasis>Tersbölünün dördüncü kullanımı</emphasis> bazı basit tezleri
belirtmek içindir. Bir tez, eşleşmeye konu dizgenin hiçbir karakterini
harcamaksızın belli bir noktada yerine getirilmesi gereken bir koşul
belirtir. Daha karmaşık tezler için alt şablonların kullanımı aşağıda
açıklanmıştır. Tez işleçleri şunlardır:
</para>
<para>
<variablelist>
<varlistentry>
<term><emphasis>\b</emphasis></term>
<listitem><simpara>Sözcük sınırlarıyla eşleşme işleci
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\B</emphasis></term>
<listitem><simpara>Sözcük içi eşleşme işleci</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\A</emphasis></term>
<listitem><simpara>Eşleşmeye konu dizgenin başlangıcı ile eşleşme
işleci (çok satırlı kipten bağımsız)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\Z</emphasis></term>
<listitem>
<simpara>
Eşleşmeye konu dizgedeki satırsonu karakterinin öncesiyle
eşleşme işleci (çok satırlı kipten bağımsız)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\z</emphasis></term>
<listitem><simpara>Eşleşmeye konu dizgenin sonu ile eşleşme işleci
(çok satırlı kipten bağımsız)</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\G</emphasis></term>
<listitem><simpara>eşleşmeye konu dizgede eşleşme başlangıcını
belirtme işleci</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<para>
Bu tez işleçleri "<literal>\b</literal>" hariç karakter sınıfları içinde
görünmezler. "<literal>\b</literal>" işleci karakter sınıfları içinde
özel bir anlama sahiptir ve tersbölü karaterini simgeler.
</para>
<para>
Eşleşmeye konu dizge içinde geçerli karakterin <literal>\w</literal>
işleci ile ve önceki karakterin <literal>\W</literal> işleci ile
eşleştiği nokta sözcük sınırının başlangıcını; geçerli karakterin
<literal>\W</literal> işleci ile ve önceki karakterin
<literal>\w</literal> işleci ile eşleştiği nokta ise sözcük sınırının
bitişini belirler.
</para>
<para>
<literal>\A</literal>, <literal>\Z</literal> ve
<literal>\z</literal> tez işleçleri, seçeneklerle belirlenen şekilde
dizgenin en başı ve dizgenin en sonu ile eşleşen geleneksel şapka ve
dolar imli işleçlerden
(<link linkend="regexp.reference.anchors">çıpalar</link> altında
açıklanmıştır) farklı olup
<link linkend="reference.pcre.pattern.modifiers">PCRE_MULTILINE</link>
veya <link linkend="reference.pcre.pattern.modifiers">
PCRE_DOLLAR_ENDONLY</link> seçeneğinden etkilenmezler.
<literal>\Z</literal> ile <literal>\z</literal> arasındaki fark
<literal>\Z</literal> işlecinin dizgenin son karakteri olan satırsonu
karakterinin öncesiyle eşleşmesi, <literal>\z</literal> işlecinin ise
sadece dizge sonu ile eşleşmesidir.
</para>
<para>
<literal>\G</literal> savı, sadece, geçerli eşleşme konumu eşleşmenin
başlangıç noktasında (<function>preg_match</function> işlevinin
<parameter>başlangıç</parameter> bağımsız değişkeni ile belirtilen noktada)
olduğu takdirde doğru olacaktır. <parameter>başlangıç</parameter>
sıfırdan farklı olduğu durumda <literal>\G</literal> işleci
<literal>\A</literal> işlecinden farklıdır.
</para>
<para>
<literal>\Q</literal> ve <literal>\E</literal>
işleçleri şablon içindeki düzenli ifade işleçlerini geçersiz kılmak
için kullanılabilmektedir. Örneğin, <literal>\w+\Q.$.\E$</literal>
düzenli ifadesi dizge sonuna demirlenmiş <literal>.$.</literal>
karakterleriyle ve bunların öncesindeki bir veya daha fazla sayıda
sözcük karakteriyle eşleşecektir. Bu, ayraçların davranışını değiştirmez.
Örneğin, <literal>#\Q#\E#$</literal> düzenli ifadesi, ikinci
<literal>#</literal> şablonun sonunu imlediğinden ve
<literal>\E#</literal> geçersiz değiştirici olarak yorumlandığından
geçersizdir.
</para>
<para>
<literal>\K</literal> işleci eşleşme
başlangıcını sıfırlamak için kullanılabilmektedir. Örneğin,
<literal>foo\Kbar</literal> şablonu, "foobar" ile eşleşir, fakat "bar"
ile eşleştiğini raporlar. <literal>\K</literal> işlecinin kullanımı
zaten eşleştirilmiş alt dizge ile etkileşmez. Örneğin,
<literal>(foo)\Kbar</literal> şablonu "foobar" ile eşleşirken eşleşen
ilk alt dizge "foo" olacaktır.
</para>
</section>
<section xml:id="regexp.reference.unicode">
<title>Unicode Karakterlerinini Özellikleri</title>
<para>
<emphasis>UTF-8 kipi</emphasis> seçildiğinde soysal karakter
türleriyle eşleşen üç düzenli ifade işleci daha devreye girmiştir. Bunlar:
</para>
<variablelist>
<varlistentry>
<term><emphasis>\p{xx}</emphasis></term>
<listitem><simpara>xx özelliğine sahip bir karakter
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\P{xx}</emphasis></term>
<listitem><simpara>xx özelliği olmayan bir karakter
</simpara></listitem>
</varlistentry>
<varlistentry>
<term><emphasis>\X</emphasis></term>
<listitem><simpara>bir genişletilmiş Unicode dizilimi
</simpara></listitem>
</varlistentry>
</variablelist>
<para>
Yukarıda <literal>xx</literal> ile belirtilen özellik isimleri Unicode
genel sınıf özellikleriyle sınırlıdır. Belirtilen her karakter, belli
bir özelliğin iki harflik kısaltmasındaki harflerle aynı olmak
zorundadır. Perl ile uyumluluk için, olumsuzlama işleci kaşlı ayraç ile
özellik kısaltmasının ilk harfi arasına konmalıdır. Örneğin,
<literal>\p{^Lu}</literal> şablonu <literal>\P{Lu}</literal> ile
aynıdır.
</para>
<para>
Eğer <literal>\p</literal> veya <literal>\P</literal> ile tek bir harf belirtilirse bu harfle başlayan tüm özellikleri ifade edecektir. Böyle bir durumda, olumsuzlama işleci kullanılmayacaksa kaşlı ayraçların kullanımı isteğe bağlıdır. Yani, bu iki örnek aynı etkiye sahiptir:
</para>
<literallayout>
\p{L}
\pL
</literallayout>
<table>
<title>Desteklenen özellik kodları</title>
<tgroup cols="3">
<thead>
<row>
<entry>Özellik</entry>
<entry>Eşleşmeler</entry>
<entry>Açıklamalar</entry>
</row>
</thead>
<tbody>
<row><entry><literal>C</literal></entry><entry>Diğer</entry><entry/></row>
<row><entry><literal>Cc</literal></entry><entry>Denetim</entry><entry/></row>
<row><entry><literal>Cf</literal></entry><entry>Biçem</entry><entry/></row>
<row><entry><literal>Cn</literal></entry><entry>Atanmamış
</entry><entry/></row>
<row><entry><literal>Co</literal></entry><entry>Özel kullanım
</entry><entry/></row>
<row rowsep="1"><entry><literal>Cs</literal></entry><entry>İkame
</entry><entry/></row>
<row><entry><literal>L</literal></entry><entry>Harf</entry>
<entry>Şu özellikleri içerir: <literal>Ll</literal>,
<literal>Lm</literal>, <literal>Lo</literal>, <literal>Lt</literal> ve
<literal>Lu</literal>.</entry></row>
<row><entry><literal>Ll</literal></entry><entry>Küçük harf
</entry><entry/></row>
<row><entry><literal>Lm</literal></entry><entry>Değiştirici harf
</entry><entry/></row>
<row><entry><literal>Lo</literal></entry><entry>Diğer harf
</entry><entry/></row>
<row><entry><literal>Lt</literal></entry><entry>Başlık harfi
</entry><entry/></row>
<row rowsep="1"><entry><literal>Lu</literal></entry><entry>Büyük harf
</entry><entry/></row>
<row><entry><literal>M</literal></entry><entry>İm</entry><entry/></row>
<row><entry><literal>Mc</literal></entry><entry>Boşluk imi
</entry><entry/></row>
<row><entry><literal>Me</literal></entry><entry>Kapsama imi
</entry><entry/></row>
<row rowsep="1"><entry><literal>Mn</literal></entry><entry>Boşluk
bırakmama imi</entry><entry/></row>
<row><entry><literal>N</literal></entry><entry>Sayı</entry><entry/></row>
<row><entry><literal>Nd</literal></entry><entry>Onluk sayı
</entry><entry/></row>
<row><entry><literal>Nl</literal></entry><entry>Harf numarası
</entry><entry/></row>
<row rowsep="1"><entry><literal>No</literal></entry><entry>Diğer sayı
</entry><entry/></row>
<row><entry><literal>P</literal></entry><entry>Noktalama</entry><entry/></row>
<row><entry><literal>Pc</literal></entry><entry>Bağlayıcı noktalama
</entry><entry/></row>
<row><entry><literal>Pd</literal></entry><entry>Tire imi</entry><entry/></row>
<row><entry><literal>Pe</literal></entry><entry>Kapama imi
</entry><entry/></row>
<row><entry><literal>Pf</literal></entry><entry>Sonlandırma imi
</entry><entry/></row>
<row><entry><literal>Pi</literal></entry><entry>Başlatma imi
</entry><entry/></row>
<row><entry><literal>Po</literal></entry><entry>Diğer noktalama
</entry><entry/></row>
<row rowsep="1"><entry><literal>Ps</literal></entry><entry>Açma imi
</entry><entry/></row>
<row><entry><literal>S</literal></entry><entry>Simge</entry><entry/></row>
<row><entry><literal>Sc</literal></entry><entry>Para simgesi
</entry><entry/></row>
<row><entry><literal>Sk</literal></entry><entry>Değiştirici simge
</entry></row>
<row><entry><literal>Sm</literal></entry><entry>Matematiksel simge
</entry><entry/></row>
<row rowsep="1"><entry><literal>So</literal></entry><entry>Diğer simge
</entry><entry/></row>
<row><entry><literal>Z</literal></entry><entry>Ayraç</entry><entry/></row>
<row><entry><literal>Zl</literal></entry><entry>Satır ayracı
</entry><entry/></row>
<row><entry><literal>Zp</literal></entry><entry>Paragraf ayracı
</entry><entry/></row>
<row><entry><literal>Zs</literal></entry><entry>Boşluk ayracı
</entry><entry/></row>
</tbody>
</tgroup>
</table>
<para>
"InMusicalSymbols" gibi ek özellikler PCRE tarafından
desteklenmemektedir.
</para>
<para>
Harf büyüklüğüne duyarsız eşleşme belirtilmesi bu önceleme
dizilimlerini etkilemez. Örneğin, <literal>\p{Lu}</literal> şablonu
daima sadece büyük harflerle eşleşecektir.
</para>
<para>
Unicode karakter kümeleri, belirli dillere ait olarak tanımlanır.
Bu kümelerden birindeki bir karakter, bir dil adı kullanılarak
eşleştirilebilir. Örneğin:
</para>
<itemizedlist>
<listitem>
<simpara><literal>\p{Greek}</literal></simpara>
</listitem>
<listitem>
<simpara><literal>\P{Han}</literal></simpara>
</listitem>
</itemizedlist>
<para>
Tanımlanmış bir dilin parçası olmayanlar ortak
(<literal>Common</literal>) olarak bir araya toplanır.
Mevcut dil listesi:
</para>
<table>
<title>Desteklenen Diller</title>
<tgroup cols="5">
<tbody>
<row>
<entry><literal>Arapça</literal></entry>
<entry><literal>Ermenice</literal></entry>
<entry><literal>Avestan</literal></entry>
<entry><literal>Balice</literal></entry>
<entry><literal>Bamum</literal></entry>
</row>
<row>
<entry><literal>Batak</literal></entry>
<entry><literal>Bengali</literal></entry>
<entry><literal>Bopomofo</literal></entry>
<entry><literal>Brahmi</literal></entry>
<entry><literal>Braille</literal></entry>
</row>
<row>
<entry><literal>Bugice</literal></entry>
<entry><literal>Buhid</literal></entry>
<entry><literal>Kanadalı_Aborijin</literal></entry>
<entry><literal>Karya</literal></entry>
<entry><literal>Çakma</literal></entry>
</row>
<row>
<entry><literal>Cham</literal></entry>
<entry><literal>Çeroki</literal></entry>
<entry><literal>Ortak</literal></entry>
<entry><literal>Kıpti</literal></entry>
<entry><literal>Çivi Yazısı</literal></entry>
</row>
<row>
<entry><literal>Kıbrıslı</literal></entry>
<entry><literal>Kiril</literal></entry>
<entry><literal>Deseret</literal></entry>
<entry><literal>Devanagari</literal></entry>
<entry><literal>Mısır_Hiyeroglifleri</literal></entry>
</row>
<row>
<entry><literal>Etiyopyalı</literal></entry>
<entry><literal>Gürcü</literal></entry>
<entry><literal>Glagolitik</literal></entry>
<entry><literal>Gotik</literal></entry>
<entry><literal>Yunan</literal></entry>
</row>
<row>
<entry><literal>Gujarati</literal></entry>
<entry><literal>Gurmukhi</literal></entry>
<entry><literal>Han</literal></entry>
<entry><literal>Hangul</literal></entry>
<entry><literal>Hanunoo</literal></entry>
</row>
<row>
<entry><literal>İbranice</literal></entry>
<entry><literal>Hiragana</literal></entry>
<entry><literal>İmparatorluk_Aramice</literal></entry>
<entry><literal>Miras</literal></entry>
<entry><literal>Yazıtlı_Pehlevi</literal></entry>
</row>
<row>
<entry><literal>Yazıtlı_Partiyalı</literal></entry>
<entry><literal>Cavaca</literal></entry>
<entry><literal>Kaithi</literal></entry>
<entry><literal>Kannada</literal></entry>
<entry><literal>Katakana</literal></entry>
</row>
<row>
<entry><literal>Kayah_Li</literal></entry>
<entry><literal>Kharoshthi</literal></entry>
<entry><literal>Kımer</literal></entry>
<entry><literal>Lao</literal></entry>
<entry><literal>Latince</literal></entry>
</row>
<row>
<entry><literal>Lepcha</literal></entry>
<entry><literal>Limbu</literal></entry>
<entry><literal>Doğrusal_B</literal></entry>
<entry><literal>Lisu</literal></entry>
<entry><literal>Likyaca</literal></entry>
</row>
<row>
<entry><literal>Lidyaca</literal></entry>
<entry><literal>Malayalamca</literal></entry>
<entry><literal>Mandaik</literal></entry>
<entry><literal>Meetei_Mayek</literal></entry>
<entry><literal>Meroitik_Elyazısı</literal></entry>
</row>
<row>
<entry><literal>Meroitik_Hiyeroglifler</literal></entry>
<entry><literal>Miao</literal></entry>
<entry><literal>Moğolca</literal></entry>
<entry><literal>Myanmar</literal></entry>
<entry><literal>New_Tai_Lue</literal></entry>
</row>
<row>
<entry><literal>Nko</literal></entry>
<entry><literal>Ogham</literal></entry>
<entry><literal>Eski_İtalik</literal></entry>
<entry><literal>Eski_Farsça</literal></entry>
<entry><literal>Eski_Güney_Arapçası</literal></entry>
</row>
<row>
<entry><literal>Eski_Türk</literal></entry>
<entry><literal>Ol_Chiki</literal></entry>
<entry><literal>Oriya</literal></entry>
<entry><literal>Osmanya</literal></entry>
<entry><literal>Phags_Pa</literal></entry>
</row>
<row>
<entry><literal>Fenike</literal></entry>
<entry><literal>Rejang</literal></entry>
<entry><literal>Runik</literal></entry>
<entry><literal>Samiriyeli</literal></entry>
<entry><literal>Saurashtra</literal></entry>
</row>
<row>
<entry><literal>Sharada</literal></entry>
<entry><literal>Shavian</literal></entry>
<entry><literal>Sinhala</literal></entry>
<entry><literal>Sora_Sompeng</literal></entry>
<entry><literal>Sundaca</literal></entry>
</row>
<row>
<entry><literal>Syloti_Nagri</literal></entry>
<entry><literal>Süryanice</literal></entry>
<entry><literal>Tagalog</literal></entry>
<entry><literal>Tagbanwa</literal></entry>
<entry><literal>Tai_Le</literal></entry>
</row>
<row>
<entry><literal>Tai_Tham</literal></entry>
<entry><literal>Tai_Viet</literal></entry>
<entry><literal>Takri</literal></entry>
<entry><literal>Tamil</literal></entry>
<entry><literal>Telugu</literal></entry>
</row>
<row>
<entry><literal>Thaana</literal></entry>
<entry><literal>Thai</literal></entry>
<entry><literal>Tibetçe</literal></entry>
<entry><literal>Tifinagh</literal></entry>
<entry><literal>Ugaritik</literal></entry>
</row>
<row>
<entry><literal>Vai</literal></entry>
<entry><literal>Yi</literal></entry>
<entry />
<entry />
<entry />
<entry />
</row>
</tbody>
</tgroup>
</table>
<para>
<literal>\X</literal> öncelemi, bir Unicode genişletilmiş grafem kümesiyle
eşleşir. Genişletilmiş bir grafem kümesi, tek bir glif oluşturmak için
birleşen bir veya daha fazla Unicode karakteridir. Gerçekte, bu, Unicode
eşdeğeri olarak düşünülebilir. Çünkü onu oluşturmak için gerçekte kaç
karakter kullanıldığına bakılmaksızın, oluşturulmuş bir karakterle
eşleşecektir.
</para>
<para>
8.32'den daha eski PCRE sürümlerinde (birlikte verilen PCRE kitaplığını
kullanırken 5.4.14'ten önceki PHP sürümlerine karşılık gelir),
<literal>\X</literal> ile <literal>(?>\PM\pM*)</literal> eşdeğerdir. Yani,
"mark" özelliği olmayan bir karakterle, ardından "mark" özelliğine sahip
sıfır veya daha fazla karakterle eşleşir ve diziyi bir atomik grup olarak
ele alır (aşağıya bakın). "Mark" özelliğine sahip karakterler tipik olarak
önceki karakteri etkileyen aksanlardır.
</para>
<para>
Unicode karakterleriyle eşleşme hızlı değildir, çünkü
PCRE on beş binden fazla karakter içeren bir kümeyi araştırmak
zorundadır. <literal>\d</literal> ve <literal>\w</literal> gibi
geleneksel işleçlerin PCRE'de Unicode özelliklerini kullanmamasının
sebebi budur.
</para>
</section>
<section xml:id="regexp.reference.anchors">
<title>Çıpalar - Şapka ve Dolar İmi</title>
<para>
Bir karakter sınıfının dışında, öntanımlı eşleşme kipinde, şapka imi (<literal>^</literal>),
eğer geçerli eşleşme noktası eşleşmeye konu dizgenin başlangıcındaysa
doğru sonuç veren bir savdır. Bir karakter sınıfının içinde ise tamamen
farklı bir anlama sahiptir (aşağıya bakın).
</para>
<para>
Şapka imi (<literal>^</literal>), eğer şablon olasılıklar içeriyorsa
şablonun ilk karakteri olmak zorunda değildir, fakat eşleşmenin
istendiği her olasılığın ilk karakteri olmak zorundadır. Eğer tüm
olasılıklar bir şapka imi (<literal>^</literal>) ile
başlıyorsa, yani şablon eşleşmeye konu dizgenin daima başlangıcıyla
eşleştirilmeye çalışılıyorsa buna, dizge başlangıcına demirlenmiş
şablon denir. (Bir şablonun demirlenmesine sebep olan başka oluşumlar da
olabilir.)
</para>
<para>
Dolar imi (<literal>$</literal>), eğer geçerli eşleşme noktası
eşleşmeye konu dizgenin sonundaysa veya dizgenin (öntanımlı olarak) son
karakteri olan satırsonu karakterinin hemen öncesindeyse doğru sonuç
veren bir savdır. Dolar imi (<literal>$</literal>), eğer şablon
olasılıklar içeriyorsa şablonun son karakteri
olmak zorunda değildir, fakat eşleşmenin istendiği her olasılığın son
karakteri olmak zorundadır. Dolar iminin bir karakter sınıfının içinde
özel bir anlamı yoktur.
</para>
<para>
Derleme veya eşleştirme sırasında
<link linkend="reference.pcre.pattern.modifiers">
PCRE_DOLLAR_ENDONLY</link> seçeneğini etkin kılarak dolar iminin
eşleşmeye konu dizgenin daima sonu ile eşleşmesi sağlanacak şekilde
anlamı değiştirilebilir. Bu seçeneğin atanmış olması \Z tezinin
anlamını etkilemeyecektir.
</para>
<para>
Şapka ve dolar imlerinin anlamları
<link linkend="reference.pcre.pattern.modifiers">PCRE_MULTILINE</link>
seçeneği (çok satırlı kip) etkin kılınarak değiştirilebilir. Bu
durumda, şapka imi eşleşmeye konu dizge içindeki "\n" karakterinin
hemen sonrasıyla, dolar imi ise hemen öncesiyle eşleşecektir. Örneğin,
aksi belirtilmedikçe, <code>/^abc$/</code> şablonu çok satırlı kipte
"def\nabc" dizgesiyle eşleşecektir. Sonuç olarak, tek satırlık kipte,
tüm olasılıkların şapka imi ile başlaması sebebiyle dizge başlangıcına
demirlenmiş şablonlar çok satırlı kipte dizge başlangıcına demirlenmiş
olmazlar. Eğer