<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/reference.pcre.pattern.syntax.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'regexp.reference.recursive.php',
    1 => 'İ&ccedil; i&ccedil;e şablonlar',
    2 => 'İ&ccedil; i&ccedil;e şablonlar',
  ),
  'up' => 
  array (
    0 => 'reference.pcre.pattern.syntax.php',
    1 => 'Şablon S&ouml;zdizimi',
  ),
  'prev' => 
  array (
    0 => 'regexp.reference.comments.php',
    1 => 'A&ccedil;ıklamalar',
  ),
  'next' => 
  array (
    0 => 'regexp.reference.performances.php',
    1 => 'Başarım',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'reference/pcre/pattern.syntax.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="regexp.reference.recursive" class="section">
  <h2 class="title">İç içe şablonlar</h2>
  <p class="para">
   Sınırsız iç içe yaylı ayraçların kullanıldığı bir şablonu yaylı
   ayraçlar arasındaki bir dizgeyle eşleştirme sorununu ele alalım.
   Ardışık işlem haricinde yapılabilecek en iyi şey iç içe sabit bir
   derinliğe kadar eşleşebilecek bir şablon kullanmaktır. Sabit olmayan
   derinlikli iç içe şablonları işlemek mümkün değildir. Perl&#039;in 5.6
   sürümü, ardışık (iç içe) düzenli ifadelere izin veren deneysel bir
   oluşuma sahiptir. Belli bir ardışıklık durumu için özel bir öğe, (?R)
   öğesi sağlanmıştır. Bu PCRE şablonu yaylı ayraçlarla ilgili bu sorunu
   çözmektedir: <code class="literal">\( ( (?&gt;[^()]+) | (?R) )* \)</code>
   (Boşlukların gözardı edilmesini sağlayan
   <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a>
   seçeneğinin etkin olduğu varsayılmıştır.)
  </p>
  <p class="para">
   İlk eşleşme bir açan yaylı ayraçla olur. Sonraki eşleşme, ya yaylı
   ayraçlar içine alınmamış bir dizi alt dizgeyle olur ya da şablonun
   kendisi ardışık olarak (doğru olarak yaylı ayraçlar içine alınmış alt
   dizgelerle) eşleşir. Ve son eşleşme bir kapatan yaylı ayraçla olur.
  </p>
  <p class="para">
   Örnek olarak verdiğimiz bu şablon sınırsız sayıda iç içe yineleme
   içerir; dolayısıyla şablon, eşleşmeyeceği dizgelere uygulandığında,
   yaylı ayraç içine alınmamış dizgelerle eşleşmek için sadece bir kerelik
   alt şablonların kullanımı önem kazanır. Bu duruma bir örnek olarak çabuk
   bir eşleşmemeyle sonuçlanan şu dizge verilebilir:
   <code class="literal">(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</code>
  </p>
  <p class="para">
   Bununla birlikte, sadece bir kerelik alt şablon kullanılmazsa eşleştirme
   işlemi çok uzun sürecektir. Bunun sebebi, eşleşmeye konu dizgeyi çok
   çeşitli şekillerde bölen + ve * yinelemelerinin olması ve bir
   başarısızlık raporlamadan önce bunların hepsinin denenmesi gereğidir.
  </p>
  <p class="para">
   Herhangi bir yakalama alt şablonu için belirlenmiş değerler, alt şablon
   değerinin atandığı ardışık işlemin en dış seviyesindeki değerlerdir.
   Eğer yukardaki şablon, <code class="literal">(ab(cd)ef)</code> dizgesiyle
   eşleştirilmeye çalışılırsa yakalanan ayraçlı değer, en üst seviyede
   elde edilen son değer olan &quot;ef&quot; olur. Eğer başka yaylı ayraçlar da
   eklenirse,
   <code class="literal">\( ( ( (?&gt;[^()]+) | (?R) )* ) \)</code> şablonu ile
   yakalanan dizge, en üst seviye yaylı ayraçların içindeki &quot;ab(cd)ef&quot;
   olur. Eğer bir şablonda 15&#039;ten fazla yakalayan yaylı ayraç varsa, PCRE
   ardışık bir işlem sırasında veriyi saklamak için pcre_malloc ile
   ayırarak ve  işi bitince pcre_free ile serbest bırakarak fazladan
   bellek sağlamak zorundadır. Eğer bu bellek ayrılamazsa, bir ardışık
   işlem sırasında bellek yetersiz hatası vermek mümkün olmadığından
   veriyi, sadece ilk 15 yakalayan yaylı ayraç için saklar.
  </p>
  <p class="para">
   <code class="literal">(?1)</code>, <code class="literal">(?2)</code> ve
   benzerleri ardışık alt şablonlarda da kullanılabilmektedir. Ayrıca,
   <code class="literal">(?P&gt;isim)</code> veya <code class="literal">(?P&amp;isim)</code>
   isimli alt şablonlarını da kullanmak mümkündür.
  </p>
  <p class="para">
   İsimli veya numararalı bir ardışık alt şablon gönderim sözdizimi,
   gönderimde bulunduğu yaylı ayraçların dışında kullanılmışsa bir
   programlama dilindeki bir alt yordam gibi işlem yapar. Önceki
   örneklerden birinde, <code class="literal">(sens|respons)e and \1ibility</code>
   şablonu  &quot;sense and sensibility&quot; ve &quot;response and responsibility&quot; ile
   eşleşiyor, fakat &quot;sense and responsibility&quot; ile eşleşmiyordu. Eğer
   <code class="literal">(sens|respons)e and (?1)ibility</code> şablonu kullanılmış
   olsaydı diğer iki dizgeyle birlikte  &quot;sense and responsibility&quot; dizgesi
   de eşleşecekti. Böyle gönderimlerin, yine de atıfta bulunduğu alt
   şablondan sonra gelmesi gerekir.
  </p>
  <p class="para">
   Eşleşmeye konu dizgenin azami uzunluğu bir tamsayı değişkenin
   tutabileceği en büyük pozitif tamsayı kadar olabilirse de PCRE ardışık
   işlem yaparak sonsuz sayıda yinelemeyi ve alt şablonu işleyebilir. Bu
   bakımdan, belli bir şablon tarafından işlenebilecek bir dizgenin
   uzunluğunu sınırlayan şey aslında, kullanılabilecek yığıtın
   büyüklüğüdür.
  </p>

 </div><?php manual_footer($setup); ?>