Регулярные выражения
Этот раздел может на первый взгляд показаться сложным.
На самом деле в регулярных выражениях ничего особо сл ожного нет. То, что вам кажется непонятной абракадаброй, при должной сноровке легко читается. Тем не менее данный раздел можно спокойно пропустить, и вернуться к его изучению позже.
Регулярные выражения — это просто шаблоны, которые используются различными функциями для поиска в тексте фрагментов, точное значение которых неизвестно. Например, регулярное выражение позволяет отыскать в тексте слово из шести букв, оканчивающееся на "ка". Это может быть и слово "аптека", и слово "оптика", и слово "спичка", и слово "опушка". Регулярные выражения ещё называют регулярками, масками и регэкспами.
Сами по себе регулярные выражения ничего делать не умеют. Как мы уже выяснили, это просто шаблоны для строк. Но эти шаблоны вы можете использовать в специальных функциях.
Функции, использующие регулярные выражения
-
STRCOMP([$строка],[$шаблон])- проводит сравнение строки[$строка]на соответствие регулярному выражению[$шаблон]. Возвращает1, если строка соответствует шаблону, иначе0. Сравни с функцией$STRFIND.strcomp('иду по дороге','\s?\S+\s+\S+\s+\S+\s?') & ! вернёт 1strcomp(' иду домой','\s?\S+\s+\S+\s+\S+\s?') & ! вернёт 0strcomp(' иду в лес ','\s?\S+\s+\S+\s+\S+\s?') & ! вернёт 1strcomp('однословие','\s?\S+\s+\S+\s+\S+\s?') & ! вернёт 0 -
$STRFIND([$строка],[$шаблон],[#номер])- эта функция ищет в строке[$строка]подстроку, соответствующую регулярному выражению[$шаблон], и возвращает эту подстроку.! функция найдёт слово из четырёх букв$STRFIND('идти к пещере', '\b\w{4}\b') &! на экране увидим 'идти'-
Если указан
[#номер], то функция возвращает не всю найденную подстроку, а только ту её часть которая соответствует группе с указанным номером[#номер]. Группы нумеруются слева направо, сначала внешние, а потом внутренние, начиная с 1.! первая группа в первых скобках, вторая во вторых, третья - в скобках, вложенных во вторые$STRFIND('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',1) &! на экране увидим '671'$STRFIND('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',2) &! на экране увидим '-190-23-999'$STRFIND('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',3) &! на экране увидим '-999' -
Если подстрока с указанным номером отсутствует, то возвращается пустая строка.
! пытаемся отыскать числа в строке без чисел$STRFIND('Восемь зелёных яблок в корзине','\d+') &! на экране будет пустая строка -
Ещё примеры:
$STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) &! 'идти к пещере'$STRFIND(' идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) &! ''$STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 1) &! 'идти'$STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 2) &! 'к'$STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 3) &! 'пещере'$STRFIND('идти к дому', 'к\s(\S+)', 0) &! 'к дому'$STRFIND('идти к дому', 'к\s(\S+)') &! 'к дому'$STRFIND('идти к дому', 'к\s(\S+)', 1) &! 'дому'$STRFIND('идти к своему дому', 'к\s(\S+)', 1) &! 'своему'
-
-
STRPOS([$строка],[$шаблон],[#номер])- эта функция похожа на функцию$STRFIND, то есть она ищет в строке[$строка]подстроку, соответствующую регулярному выражению[$шаблон]. Однако, в отличие от функции$STRFIND, она возвращает номер символа, с которого начинается вхождение найденной подстроки в указанную строку[$строка].! функция найдёт слово из трёх букв, и вернёт номер первого символа,! с которого это слово начинаетсяSTRPOS('Здесь три слова.', '\b\w{3}\b') &! на экране увидим 7-
Если указан
[#номер], то функция возвращает номер символа, с которого начинается вхождение не всей подстроки, а только той её части, которая соответствует группе с указанным номером[#номер]. Группы нумеруются слева направо, сначала внешние, а потом внутренние, начиная с 1.!------'----5--8------15--'STRPOS('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',1) &! на экране увидим 5STRPOS('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',2) &! на экране увидим 8STRPOS('+33-671-190-23-999', '\+\d{1,2}-(\d{3})((-\d+)+)',3) &! на экране увидим 15 -
Если подстрока с указанным номером отсутствует, то возвращается 0.
! пытаемся отыскать числа в строке без чиселSTRPOS('Восемь зелёных яблок в корзине','\d+') &! на экране будет 0 -
Ещё примеры:
STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) &! 1STRPOS(' идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) &! 0STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 1) &! 1STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 2) &! 6STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 3) &! 8STRPOS('идти к пещере', '^(\S+)\s(\S+)(\s(\S+))?$', 4) &! 8STRPOS('идти к дому', 'к\s(\S+)', 0) &! 6STRPOS('идти к дому', 'к\s(\S+)') &! 6STRPOS('идти к дому', 'к\s(\S+)', 1) &! 8STRPOS('идти к своему дому', 'к\s(\S+)', 1) &! 8
-
-
ARRCOMP([$имя_массива],[$шаблон],[#начало])- возвращает номер элемента массива[$имя_массива], соответствующего регулярному выражению[$шаблон]. Поиск начинается с элемента с номером[#начало]; индексация элементов массива ведётся с нуля. Если указанное значение не найдено, функция возвращает -1.- Подробное описание функции с примерами в разделе "Массивы".
Операторы, использующие регулярные выражения
SCANSTR [$имя_массива], [$текст_для_разбора], [$регэксп], [#номер_группы]— оператор ищет в строке[$текст_для_разбора]непересекающиеся фрагменты, соответствующие регулярному выражению[$регэксп], и помещает их в массив[$имя_массива]. Если параметр[#номер_группы]указан и отличается от нуля, в массив помещается не весь фрагмент целиком, а лишь та его часть, которая соответствует группе с указанным номером.- Подробное описание оператора и примеры использования в разделе "массивы".