1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/parle/pattern.matching.xml
2024-04-30 02:42:55 +03:00

418 lines
16 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0be325d396b139feeaee38168f779be962b74f09 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="parle.pattern.matching" xmlns="http://docbook.org/ns/docbook">
<title>Сопоставление с шаблоном Parle</title>
<titleabbrev>Сопоставление с шаблоном</titleabbrev>
<para>
Модуль Parle поддерживает сопоставление регулярных выражений аналогично flex.
Также поддерживаются следующие наборы символов интерфейса POSIX:
<simplelist type="inline">
<member><literal>[:alnum:]</literal></member>
<member><literal>[:alpha:]</literal></member>
<member><literal>[:blank:]</literal></member>
<member><literal>[:cntrl:]</literal></member>
<member><literal>[:digit:]</literal></member>
<member><literal>[:graph:]</literal></member>
<member><literal>[:lower:]</literal></member>
<member><literal>[:print:]</literal></member>
<member><literal>[:punct:]</literal></member>
<member><literal>[:space:]</literal></member>
<member><literal>[:upper:]</literal></member>
<member><literal>[:xdigit:]</literal></member>
</simplelist>
.
</para>
<para>
Классы символов Unicode не включены по умолчанию, передайте параметр --enable-parle-utf32, чтобы сделать классы символов доступными.
Конкретная кодировка сопоставляется через правильно построенное регулярное выражение.
Например, соответствие символу евро в кодировке UTF-8 задают регулярным выражением <literal>[\xe2][\x82][\xac]</literal>.
Шаблон для строки в кодировке UTF-8 бывает таким: <literal>[ -\x7f]{+}[\x80-\xbf]{+}[\xc2-\xdf]{+}[\xe0-\xef]{+}[\xf0-\xff]+</literal>.
</para>
<section xml:id="parle.regex.chars" annotations="chunk:false">
<title>Представления символов</title>
<para>
<table>
<title>Представления символов</title>
<tgroup cols="2">
<thead>
<row>
<entry>Последовательность</entry><entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>\a</entry><entry>Символ оповещения, сигнал.</entry>
</row>
<row>
<entry>\b</entry><entry>Символ возврата "Backspace".</entry>
</row>
<row>
<entry>\e</entry><entry>Символ ESC, \x1b.</entry>
</row>
<row>
<entry>\n</entry><entry>Новая строка.</entry>
</row>
<row>
<entry>\r</entry><entry>Возврат каретки.</entry>
</row>
<row>
<entry>\f</entry><entry>Разрыв страницы, \x0c.</entry>
</row>
<row>
<entry>\t</entry><entry>Горизонтальная табуляция, \x09.</entry>
</row>
<row>
<entry>\v</entry><entry>Вертикальная табуляция, \x0b.</entry>
</row>
<row>
<entry>\oct</entry><entry>Символ, заданный трёхзначным восьмеричным кодом.</entry>
</row>
<row>
<entry>\xhex</entry><entry>Символ, заданный шестнадцатеричным кодом.</entry>
</row>
<row>
<entry>\cchar</entry><entry>Именованный управляющий символ.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="parle.regex.charclass" annotations="chunk:false">
<title>Классы символов</title>
<para>
<table>
<title>Классы символов</title>
<tgroup cols="2">
<thead>
<row>
<entry>Последовательность</entry><entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>[...]</entry><entry>Одиночный символ, указанный или содержащийся в указанном диапазоне. Диапазоны можно комбинировать с операторами <literal>{+}</literal> и <literal>{-}</literal>. Например, <literal>[a-z]{+}[0-9]</literal> то же, что и <literal>[0-9a-z]</literal>, а <literal>[a-z]{-}[aeiou]</literal> то же, что и <literal>[b-df-hj-np-tv-z]</literal>.</entry>
</row>
<row>
<entry>[^...]</entry><entry>Одиночный символ не указан и не содержится в указанном диапазоне.</entry>
</row>
<row>
<entry>.</entry><entry>Любой символ, по умолчанию <literal>[^\n].</literal></entry>
</row>
<row>
<entry>\d</entry><entry>Любая десятичная цифра, <literal>[0-9]</literal>.</entry>
</row>
<row>
<entry>\D</entry><entry>Любой символ, кроме десятичной цифры, <literal>[^0-9]</literal>.</entry>
</row>
<row>
<entry>\s</entry><entry>Любой пробельный символ, <literal>[ \t\n\r\f\v]</literal>.</entry>
</row>
<row>
<entry>\S</entry><entry>Любой непробельный символ, <literal>[^ \t\n\r\f\v]</literal>.</entry>
</row>
<row>
<entry>\w</entry><entry>Любой символ, образующий "слово", <literal>[a-zA-Z0-9_]</literal>.</entry>
</row>
<row>
<entry>\W</entry><entry>Любой символ, не образующий "слово", <literal>[^a-zA-Z0-9_]</literal>.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="parle.regex.unicodecharclass" annotations="chunk:false">
<title>Классы символов Unicode</title>
<para>
<table>
<title>Классы символов Unicode</title>
<tgroup cols="2">
<thead>
<row>
<entry>Последовательность</entry><entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>\p{C}</entry><entry>Прочие.</entry>
</row>
<row>
<entry>\p{Cc}</entry><entry>Прочие, контрольные.</entry>
</row>
<row>
<entry>\p{Cf}</entry><entry>Прочие, форматирование.</entry>
</row>
<row>
<entry>\p{Co}</entry><entry>Прочие, для приватного использования.</entry>
</row>
<row>
<entry>\p{Cs}</entry><entry>Прочие, суррогаты.</entry>
</row>
<row>
<entry>\p{L}</entry><entry>Буквы.</entry>
</row>
<row>
<entry>\p{LC}</entry><entry>Буквы, регистр.</entry>
</row>
<row>
<entry>\p{Ll}</entry><entry>Буквы, в нижнем регистре.</entry>
</row>
<row>
<entry>\p{Lm}</entry><entry>Буквы, модификаторы.</entry>
</row>
<row>
<entry>\p{Lo}</entry><entry>Буквы, прочее.</entry>
</row>
<row>
<entry>\p{Lt}</entry><entry>Буквы, заглавные буквы.</entry>
</row>
<row>
<entry>\p{Lu}</entry><entry>Буквы, в верхнем регистре.</entry>
</row>
<row>
<entry>\p{M}</entry><entry>Отметки.</entry>
</row>
<row>
<entry>\p{Mc}</entry><entry>Отметки, двоеточия.</entry>
</row>
<row>
<entry>\p{Me}</entry><entry>Отметки, вложения.</entry>
</row>
<row>
<entry>\p{Mn}</entry><entry>Отметки, апострофы.</entry>
</row>
<row>
<entry>\p{N}</entry><entry>Числа.</entry>
</row>
<row>
<entry>\p{Nd}</entry><entry>Числа, десятичная цифра.</entry>
</row>
<row>
<entry>\p{Nl}</entry><entry>Числа, цифры обозначаемые буквами (римские).</entry>
</row>
<row>
<entry>\p{No}</entry><entry>Числа, прочие.</entry>
</row>
<row>
<entry>\p{P}</entry><entry>Знаки пунктуации.</entry>
</row>
<row>
<entry>\p{Pc}</entry><entry>Знаки пунктуации, соединители.</entry>
</row>
<row>
<entry>\p{Pd}</entry><entry>Знаки пунктуации, тире.</entry>
</row>
<row>
<entry>\p{Pe}</entry><entry>Знаки пунктуации, закрывающие скобки.</entry>
</row>
<row>
<entry>\p{Pf}</entry><entry>Знаки пунктуации, закрывающие кавычки.</entry>
</row>
<row>
<entry>\p{Pi}</entry><entry>Знаки пунктуации, открывающие кавычки.</entry>
</row>
<row>
<entry>\p{Po}</entry><entry>Знаки пунктуации, прочее.</entry>
</row>
<row>
<entry>\p{Ps}</entry><entry>Знаки пунктуации, открывающие скобки.</entry>
</row>
<row>
<entry>\p{S}</entry><entry>Символы.</entry>
</row>
<row>
<entry>\p{Sc}</entry><entry>Символы, валюты.</entry>
</row>
<row>
<entry>\p{Sk}</entry><entry>Символы, модификаторы.</entry>
</row>
<row>
<entry>\p{Sm}</entry><entry>Символы, математические.</entry>
</row>
<row>
<entry>\p{So}</entry><entry>Символы, прочие.</entry>
</row>
<row>
<entry>\p{Z}</entry><entry>Разделители.</entry>
</row>
<row>
<entry>\p{Zl}</entry><entry>Разделители, линия.</entry>
</row>
<row>
<entry>\p{Zp}</entry><entry>Разделители, параграф.</entry>
</row>
<row>
<entry>\p{Zs}</entry><entry>Разделители, пробел.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Эти классы символов доступны, только если во время компиляции передали опцию --enable-parle-utf32.
</para>
</section>
<section xml:id="parle.regex.alternation" annotations="chunk:false">
<title>Чередование и повторение</title>
<para>
<table>
<title>Чередование и повторение</title>
<tgroup cols="3">
<thead>
<row>
<entry>Последовательность</entry><entry>Жадный квантификатор</entry><entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>...|...</entry><entry>-</entry><entry>Попробуйте чередовать подшаблоны.</entry>
</row>
<row>
<entry>*</entry><entry>да</entry><entry>Совпадение 0 или более раз.</entry>
</row>
<row>
<entry>+</entry><entry>да</entry><entry>Совпадение 1 или более раз.</entry>
</row>
<row>
<entry>?</entry><entry>да</entry><entry>Совпадение 0 или 1 раз.</entry>
</row>
<row>
<entry>{n}</entry><entry>нет</entry><entry>Совпадение ровно n раз.</entry>
</row>
<row>
<entry>{n,}</entry><entry>да</entry><entry>Совпадение не менее n раз.</entry>
</row>
<row>
<entry>{n,m}</entry><entry>да</entry><entry>Совпадение не менее n раз, но не более m раз.</entry>
</row>
<row>
<entry>*?</entry><entry>нет</entry><entry>Match 0 or more times.</entry>
</row>
<row>
<entry>+?</entry><entry>нет</entry><entry>Match 1 or more times.</entry>
</row>
<row>
<entry>??</entry><entry>нет</entry><entry>Совпадение 0 или 1 раз.</entry>
</row>
<row>
<entry>{n,}?</entry><entry>нет</entry><entry>Совпадение не менее n раз.</entry>
</row>
<row>
<entry>{n,m}?</entry><entry>нет</entry><entry>Совпадение не менее n раз, но не более m раз.</entry>
</row>
<row>
<entry>{MACRO}</entry><entry>-</entry><entry>Включить макрос регулярного выражения в текущее регулярное выражение.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="parle.regex.anchors" annotations="chunk:false">
<title>Якоря</title>
<para>
<table>
<title>Якоря</title>
<tgroup cols="2">
<thead>
<row>
<entry>Последовательность</entry><entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>^</entry><entry>Начало строки или после новой строки.</entry>
</row>
<row>
<entry>$</entry><entry>Конец строки или перед новой строкой.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
<section xml:id="parle.regex.grouping" annotations="chunk:false">
<title>Группировка</title>
<para>
<table>
<title>Группировка</title>
<tgroup cols="2">
<thead>
<row>
<entry>Последовательность</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>(...)</entry>
<entry>Сгруппировать регулярное выражение, чтобы переопределить приоритет операторов по умолчанию.</entry>
</row>
<row>
<entry valign="top">(?r-s:pattern)</entry>
<entry>
<simpara>
Применить опцию r и опустите опцию s при интерпретации шаблона.
Параметрам разрешается быть нулём или более символов i, s или x.
</simpara>
<simpara>
<literal>i</literal> — без учёта регистра.
</simpara>
<simpara>
<literal>-i</literal>с учётом регистра.
</simpara>
<simpara>
<literal>s</literal> — изменяет значение <literal>.</literal>, чтобы соответствовать любому символу.
</simpara>
<simpara>
<literal>-s</literal> — изменяет значение <literal>.</literal>,
чтобы соответствовать любому символу кроме <literal>\n</literal>.
</simpara>
<simpara>
<literal>x</literal> — игнорирует комментарии и пробелы в шаблонах.
Пробелы игнорируются, если они не экранированы обратной косой чертой,
не содержатся в "" или не появляются внутри диапазона символов.
</simpara>
<simpara>
Эти параметры разрешается применять глобально на уровне правил за счёт передачи в лексер комбинации битовых флагов.
</simpara>
</entry>
</row>
<row>
<entry>(?# comment )</entry>
<entry>
Пропускает всё внутри (). Первый встретившийся символ ) завершает шаблон. Комментарий не может содержать символ ).
Комментарий может занимать несколько строки.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->