<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.parle.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'parle.pattern.matching.php',
    1 => 'Сопоставление с шаблоном',
    2 => 'Сопоставление с шаблоном Parle',
  ),
  'up' => 
  array (
    0 => 'book.parle.php',
    1 => 'Parle',
  ),
  'prev' => 
  array (
    0 => 'parle.constants.php',
    1 => 'Предопределённые константы',
  ),
  'next' => 
  array (
    0 => 'parle.examples.php',
    1 => 'Примеры',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/parle/pattern.matching.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="parle.pattern.matching" class="chapter">
 <h1 class="title">Сопоставление с шаблоном Parle</h1>

 
 <p class="para">
  Модуль Parle поддерживает сопоставление регулярных выражений аналогично генератору flex.
  Поддерживаются также следующие наборы символов интерфейса POSIX:
  <span class="simplelist"><code class="literal">[:alnum:]</code>, <code class="literal">[:alpha:]</code>, <code class="literal">[:blank:]</code>, <code class="literal">[:cntrl:]</code>, <code class="literal">[:digit:]</code>, <code class="literal">[:graph:]</code>, <code class="literal">[:lower:]</code>, <code class="literal">[:print:]</code>, <code class="literal">[:punct:]</code>, <code class="literal">[:space:]</code>, <code class="literal">[:upper:]</code>, <code class="literal">[:xdigit:]</code></span>.
 </p>
 <p class="para">
  Классы символов Юникода не включены по умолчанию, передайте параметр --enable-parle-utf32, чтобы сделать классы символов доступными.
  Конкретная кодировка сопоставляется через правильно построенное регулярное выражение.
  Например, соответствие символу евро в кодировке UTF-8 задают регулярным выражением <code class="literal">[\xe2][\x82][\xac]</code>.
  Шаблон для строки в кодировке UTF-8 бывает таким: <code class="literal">[ -\x7f]{+}[\x80-\xbf]{+}[\xc2-\xdf]{+}[\xe0-\xef]{+}[\xf0-\xff]+</code>.
 </p>

 <div id="parle.regex.chars" class="section">
  <h2 class="title">Представления символов</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Представления символов</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th><th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>\a</td><td>Символ оповещения, сигнал.</td>
      </tr>

      <tr>
       <td>\b</td><td>Символ возврата &quot;Backspace&quot;.</td>
      </tr>

      <tr>
       <td>\e</td><td>Символ ESC, \x1b.</td>
      </tr>

      <tr>
       <td>\n</td><td>Новая строка.</td>
      </tr>

      <tr>
       <td>\r</td><td>Возврат каретки.</td>
      </tr>

      <tr>
       <td>\f</td><td>Разрыв страницы, \x0c.</td>
      </tr>

      <tr>
       <td>\t</td><td>Горизонтальная табуляция, \x09.</td>
      </tr>

      <tr>
       <td>\v</td><td>Вертикальная табуляция, \x0b.</td>
      </tr>

      <tr>
       <td>\oct</td><td>Символ, заданный трёхзначным восьмеричным кодом.</td>
      </tr>

      <tr>
       <td>\xhex</td><td>Символ, заданный шестнадцатеричным кодом.</td>
      </tr>

      <tr>
       <td>\cchar</td><td>Именованный управляющий символ.</td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 <div id="parle.regex.charclass" class="section">
  <h2 class="title">Классы символов</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Классы символов</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th><th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>[...]</td><td>Отдельный символ, который указали в символьном классе в виде списка или диапазона. Диапазоны комбинируют с операторами <code class="literal">{+}</code> и <code class="literal">{-}</code>. Например, <code class="literal">[a-z]{+}[0-9]</code> то же, что и <code class="literal">[0-9a-z]</code>, а <code class="literal">[a-z]{-}[aeiou]</code> то же, что и <code class="literal">[b-df-hj-np-tv-z]</code>.</td>
      </tr>

      <tr>
       <td>[^...]</td><td>Отдельный символ, который не содержится в списке или диапазоне символьного класса.</td>
      </tr>

      <tr>
       <td>.</td><td>Отдельный произвольный символ, по умолчанию <code class="literal">[^\n].</code></td>
      </tr>

      <tr>
       <td>\d</td><td>Отдельная произвольная десятичная цифра, <code class="literal">[0-9]</code>.</td>
      </tr>

      <tr>
       <td>\D</td><td>Отдельный произвольный символ, кроме десятичной цифры, <code class="literal">[^0-9]</code>.</td>
      </tr>

      <tr>
       <td>\s</td><td>Отдельный произвольный пробельный символ, <code class="literal">[ \t\n\r\f\v]</code>.</td>
      </tr>

      <tr>
       <td>\S</td><td>Отдельный произвольный непробельный символ, <code class="literal">[^ \t\n\r\f\v]</code>.</td>
      </tr>

      <tr>
       <td>\w</td><td>Отдельный произвольный символ, который образует «слово», <code class="literal">[a-zA-Z0-9_]</code>.</td>
      </tr>

      <tr>
       <td>\W</td><td>Отдельный произвольный символ, который не образует «слово», <code class="literal">[^a-zA-Z0-9_]</code>.</td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 <div id="parle.regex.unicodecharclass" class="section">
  <h2 class="title">Классы символов Юникода</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Классы символов кодировки Unicode</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th><th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>\p{C}</td><td>Прочие.</td>
      </tr>

      <tr>
       <td>\p{Cc}</td><td>Прочие, контрольные.</td>
      </tr>

      <tr>
       <td>\p{Cf}</td><td>Прочие, форматирование.</td>
      </tr>

      <tr>
       <td>\p{Co}</td><td>Прочие, для приватного использования.</td>
      </tr>

      <tr>
       <td>\p{Cs}</td><td>Прочие, суррогаты.</td>
      </tr>

      <tr>
       <td>\p{L}</td><td>Буквы.</td>
      </tr>

      <tr>
       <td>\p{LC}</td><td>Буквы, регистр.</td>
      </tr>

      <tr>
       <td>\p{Ll}</td><td>Буквы, в нижнем регистре.</td>
      </tr>

      <tr>
       <td>\p{Lm}</td><td>Буквы, модификаторы.</td>
      </tr>

      <tr>
       <td>\p{Lo}</td><td>Буквы, прочее.</td>
      </tr>

      <tr>
       <td>\p{Lt}</td><td>Буквы, заглавные буквы.</td>
      </tr>

      <tr>
       <td>\p{Lu}</td><td>Буквы, в верхнем регистре.</td>
      </tr>

      <tr>
       <td>\p{M}</td><td>Отметки.</td>
      </tr>

      <tr>
       <td>\p{Mc}</td><td>Отметки, двоеточия.</td>
      </tr>

      <tr>
       <td>\p{Me}</td><td>Отметки, вложения.</td>
      </tr>

      <tr>
       <td>\p{Mn}</td><td>Отметки, апострофы.</td>
      </tr>

      <tr>
       <td>\p{N}</td><td>Числа.</td>
      </tr>

      <tr>
       <td>\p{Nd}</td><td>Числа, десятичная цифра.</td>
      </tr>

      <tr>
       <td>\p{Nl}</td><td>Числа, цифры обозначаемые буквами (римские).</td>
      </tr>

      <tr>
       <td>\p{No}</td><td>Числа, прочие.</td>
      </tr>

      <tr>
       <td>\p{P}</td><td>Знаки пунктуации.</td>
      </tr>

      <tr>
       <td>\p{Pc}</td><td>Знаки пунктуации, соединители.</td>
      </tr>

      <tr>
       <td>\p{Pd}</td><td>Знаки пунктуации, тире.</td>
      </tr>

      <tr>
       <td>\p{Pe}</td><td>Знаки пунктуации, закрывающие скобки.</td>
      </tr>

      <tr>
       <td>\p{Pf}</td><td>Знаки пунктуации, закрывающие кавычки.</td>
      </tr>

      <tr>
       <td>\p{Pi}</td><td>Знаки пунктуации, открывающие кавычки.</td>
      </tr>

      <tr>
       <td>\p{Po}</td><td>Знаки пунктуации, прочее.</td>
      </tr>

      <tr>
       <td>\p{Ps}</td><td>Знаки пунктуации, открывающие скобки.</td>
      </tr>

      <tr>
       <td>\p{S}</td><td>Символы.</td>
      </tr>

      <tr>
       <td>\p{Sc}</td><td>Символы, валюты.</td>
      </tr>

      <tr>
       <td>\p{Sk}</td><td>Символы, модификаторы.</td>
      </tr>

      <tr>
       <td>\p{Sm}</td><td>Символы, математические.</td>
      </tr>

      <tr>
       <td>\p{So}</td><td>Символы, прочие.</td>
      </tr>

      <tr>
       <td>\p{Z}</td><td>Разделители.</td>
      </tr>

      <tr>
       <td>\p{Zl}</td><td>Разделители, линия.</td>
      </tr>

      <tr>
       <td>\p{Zp}</td><td>Разделители, параграф.</td>
      </tr>

      <tr>
       <td>\p{Zs}</td><td>Разделители, пробел.</td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
   Эти классы символов доступны, только если во время компиляции передали опцию --enable-parle-utf32.
  </p>
 </div>
 <div id="parle.regex.alternation" class="section">
  <h2 class="title">Чередование и повторение</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Чередование и повторение</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th><th>Жадный квантификатор</th><th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>...|...</td><td>-</td><td>Попробуйте чередовать подшаблоны.</td>
      </tr>

      <tr>
       <td>*</td><td>да</td><td>Совпадение 0 или более раз.</td>
      </tr>

      <tr>
       <td>+</td><td>да</td><td>Совпадение 1 или более раз.</td>
      </tr>

      <tr>
       <td>?</td><td>да</td><td>Совпадение 0 или 1 раз.</td>
      </tr>

      <tr>
       <td>{n}</td><td>нет</td><td>Совпадение ровно n раз.</td>
      </tr>

      <tr>
       <td>{n,}</td><td>да</td><td>Совпадение не меньше n раз.</td>
      </tr>

      <tr>
       <td>{n,m}</td><td>да</td><td>Совпадение не меньше n раз, но не более m раз.</td>
      </tr>

      <tr>
       <td>*?</td><td>нет</td><td>Совпадение 0 или больше раз.</td>
      </tr>

      <tr>
       <td>+?</td><td>нет</td><td>Совпадение 1 или больше раз.</td>
      </tr>

      <tr>
       <td>??</td><td>нет</td><td>Совпадение 0 или 1 раз.</td>
      </tr>

      <tr>
       <td>{n,}?</td><td>нет</td><td>Совпадение не меньше n раз.</td>
      </tr>

      <tr>
       <td>{n,m}?</td><td>нет</td><td>Совпадение не меньше n раз, но не более m раз.</td>
      </tr>

      <tr>
       <td>{MACRO}</td><td>-</td><td>Включить макрос регулярного выражения в текущее регулярное выражение.</td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 <div id="parle.regex.anchors" class="section">
  <h2 class="title">Якоря</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Якоря</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th><th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>^</td><td>Начало строки или после новой строки.</td>
      </tr>

      <tr>
       <td>$</td><td>Конец строки или перед новой строкой.</td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>
 <div id="parle.regex.grouping" class="section">
  <h2 class="title">Группировка</h2>
  <p class="para">
   <table class="doctable table">
    <caption><strong>Группировка</strong></caption>
    
     <thead>
      <tr>
       <th>Последовательность</th>
       <th>Описание</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>(...)</td>
       <td>Сгруппировать регулярное выражение, чтобы переопределить приоритет операторов по умолчанию.</td>
      </tr>

      <tr>
       <td style="vertical-align: top;">(?r-s:pattern)</td>
       <td>
        <span class="simpara">
         Применить опцию r и опустите опцию s при интерпретации шаблона.
         Параметрам разрешается быть нулём или более символов i, s или x.
        </span>
        <span class="simpara">
         <code class="literal">i</code> — без учёта регистра.
        </span>
        <span class="simpara">
         <code class="literal">-i</code> — с учётом регистра.
        </span>
        <span class="simpara">
         <code class="literal">s</code> — изменяет значение <code class="literal">.</code>, чтобы соответствовать любому символу.
        </span>
        <span class="simpara">
         <code class="literal">-s</code> — изменяет значение <code class="literal">.</code>,
         чтобы соответствовать любому символу кроме <code class="literal">\n</code>.
        </span>
        <span class="simpara">
         <code class="literal">x</code> — игнорирует комментарии и пробелы в шаблонах.
         Пробелы игнорируются, если их не заэкранировали обратной косой чертой,
         не содержатся в &quot;&quot; или не появляются внутри диапазона символов.
        </span>
        <span class="simpara">
         Эти параметры разрешается применять глобально на уровне правил за счёт передачи в лексер комбинации битовых флагов.
        </span>
       </td>
      </tr>

      <tr>
       <td>(?# comment )</td>
       <td>
        Пропускает всё внутри (). Первый встретившийся символ ) завершает шаблон. В комментарии нельзя указывать символ ).
        Комментарий может занимать несколько строки.
       </td>
      </tr>

     </tbody>
    
   </table>

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