Использование регулярных выражений

Использование регулярных выражений применяется как выражение, которые полностью или частично соответствует ряду правил. Регулярные выражения позволят не вводить огромные списки значений, а при помощи нескольких правил задать только их шаблоны.

Шаблоны регулярных выражений состоят из символов двух основных классов:

  • § Литеральные символы, например, цифры и буквы, а также символы, которые не имеют служебной функции и должны быть найдены, как есть.
  • § Метасимволы, один символ или группа символов, которые выполняют определенную функцию для создания шаблона выражения.

Литеральные символы

К литеральным символам относятся все цифровые символы, строчные и прописные буквы русского и латинского алфавитов. К литеральным символам не относятся метасимволы

. ^ $ * ? + | () [] {} \

Экранирование метасимволов

Тем не менее, вхождение этих символов в выражение также можно определять, при помощи символа экранирования «\». Для того, чтобы метасимволы распознавались как литеральные символы, символ экранирования должен стоять перед метасимволом.

Например: \. или \$ или \^

Кроме того, почти всегда теряют свое значение метасимволы, заключенные в квадратные скобки [], например, [.*\^].

Особенности:

В отличие от Perl в POSIX выражениях, используемых в системе, обратная косая черта \ в квадратных скобках ( [\] ) всегда интерпретируется как литеральный. Обратную косую черту тоже можно экранировать: //.

Символ ^ может использоваться в выражении с квадратными скобками как в качестве литерального, так и в качестве метасимвола
— ^ первый символ — интерпретируется как метасимвол НЕ, отрицающий символы, заданные в квадратных скобках, например: [^abc]
— ^ не первый символ — интерпретируется как литеральный символ, например [abc^]

Символы скобок () [] и {} по одиночке интерпретируются как литеральные, а в группе в правильной последовательности как метасимволы.

Метасимволы

Метасимволы, т.е. служебные символы или группы символов, делятся на несколько категорий в зависимости от функции, которую они выполняют.

а) . точка

Символ точки заменяет любой символ. Чтобы искать точку, как литеральный символ, используете экранирование «\.».

б) Символьные классы [: :]

описывают диапазоны и не зависят от конкретного языка

Класс
[:upper:]
[:lower:]
[:alpha:]
[:digit:]
[:xdigit:]
[:alnum:]
[:punct:]
[:blank:]
[:space:]
[:cntrl:]
[:graph:]
[:print:]
Эквивалент
[A-Z] или [А-Я]
[a-z] или [а-я]
[[:upper:][:lower:]]
[0-9]
[[:digit:]A-Fa-f]
[[:alpha:][:digit:]]
[-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~]
[[:graph:] ]
Значение
Символы верхнего регистра
Символы нижнего регистра
Буквенные символы
Цифровые символы
Шестнадцатеричные
Буквы и цифры
Знаки пунктуации
Пробел и табуляция
Пробел, табуляция, перенос строки, перевод каретки, разрыв страницы и др.
Управляющие символы
Печатные символы
Печатные символы и пробелы

Использование класса возможно лишь внутри квадратных скобок, т.к. сочетания [: :] определяют сам класс. Вторая пара квадратных скобок используется для обозначения интервала, в который входит данный класс символов, например, [[:alpha:]]

в) Упорядочивающие классы [. .]

Для некоторых европейских языков, в которых одна буква алфавита может быть выражена несколькими знаками, например ch в испанском языке. В таком случае следует использовать упорядочивающий класс [. .], т.е. выражение [[.ch.]].

г) Классы эквивалентных символов [= =]

Для языков, в алфавитах которых используются похожие символы при необходимости можно воспользоваться классом эквивалентных символов [= =].

Например, в испанском языке [[=n=]] будет соответствовать как N, так и ñ в слове El Niño. В немецком языке можно задавать правила для букв с умлаутами: [[=ö=]].

В русском языке буква ё являются отдельными буквами, которые входят в диапазон [А-Яа-я]. Поэтому выражения [[=е=]] и [[=ё=]] выводят только соответствующие символы.

д) Сопоставление и группировка выражений

Метасимвол
|
( )
[char]
[^char]
Метасимвол
Или
Группа
Список
Список
Описание
перечень альтернативных значений
Группировка выражений, например альтернативных значений
Список список символов, не требует запятой при перечислении ([abc], не [a,b,c]), может включать интервалы [a-d] аналогично [abcd] или альтернативные варианты [a-c |x-z|0-9]
Список символов, которые отсутствуют в строке. Если символ ^ стоит не сразу после скобки, он будет интерпретирован как литеральный, а не как отрицание

е) Квантификаторы и операторы повтора предшествующего символа или группы символов

Квантификатор
*
?
+
{m}
{m,}
{m,n}
Встречается
0 или более раз
0 или 1 раз
1 или более раз
точно m раз
как минимум m раз
от m до n раз
Описание
ab*c соответствует ac, abc, и abbc, но не соответствует abb
ab?c соответствует abc и ac, но не соответствует abbc
a+ соответствует a, aa и aaa, но не соответствует bbb
a{2} соответствует aa, но не a
a{3, } соответствует aaa или aaaa, но не соответствует aa
a {3,5} соответствует aaa и aaaaa, но не aa

Особенность системы приводит к тому, что по выражению a{3} или a{3,5} строка aaaaaa также будет считаться подходящей, поэтому могут потребоваться дополнительные правила. Например, добавление символа, отличного от повторяемого, например aв{3}[^a].

ж) Метасимволы привязки

Метасимвол
^
$
Описание
Привязать выражение к началу строки
Привязать выражение к концу строки

Оба метасимвола привязки к строке могут использоваться одновременно, т.е. ^12345$ будет соответствовать только строке 12345.

Возможности использования в системе

Система цензуры

В системе существует ограничение на отправку сообщений с определенным текстом, для этого используется система цензуры. Конституция Российской Федерации, гарантируя свободу мысли и слова, запрещает пропаганду или агитацию, возбуждающие социальную, расовую, национальную или религиозную ненависть и вражду, пропаганду социального, расового, национального, религиозного или языкового превосходства (статья 29). Для предотвращения подобных случаев, а также использования нецензурных выражений, используется глобальный фильтр, который распространяется на всех пользователей.

Фильтр «Запрещенные слова»

Помимо глобальных фильтров каждый пользователь может задавать любые комбинации собственных фильтров. Причем фильтры могут служить не только для фильтрации нецензурных выражений, но и для других целей.

Обработка входящих сообщений

Система позволяет организовать гибкую и настраиваемую систему обработки входящих сообщений. Для этого также используются регулярные выражения. Для входящих сообщений можно настроить следующие действия:

  • § оправка на электронную почту
  • § переадресация на другой номер
  • § передача по HTTP
  • § ответ в SMS

Для выбора одной или нескольких операций используются условия, построенные на регулярных выражениях.

Примеры составления регулярных выражений

Пример 1

Проверить наличие в тексте даты и месяца :

[[:digit:]]{1,2}[[:space:]]+марта

при помощи данного выражения мы ищем:

[[:digit:]]{1,2}
[[:space:]]+
марта
одна или две цифры, соответствующие числу, для однозначных и двузначных чисел
один или несколько пробелов между днем и названием месяца
строка литеральных символов

Пример 2

Регулярные выражения очень удобны для нахождения слов в разных падежах и числах. При этом нет необходимости перечислять все варианты в виде списка

(^|[[:space:]])выражени[еия]

Выражение позволяет запретить следующие варианты слова: выражение, выражении и выражения соответственно

(^|[[:space:]])
[еия]
чтобы слово было найдено, написано ли оно в начале строки или после пробела
в квадратных скобках указываем варианты падежных окончаний.
Получить коммерческое предложение
Оставьте свои контактные данные. С вами свяжется наш менеджер и подробно расскажет о стоимости и возможностях СМС рассылки.

Выбирайте лучшее

диалог двух людей
Персональный менеджер

Забота о каждом клиенте

Провайдер с лицензией

Ответственность за свое дело

Прямые подключения

Гарантируем качество СМС рассылки

ноутбук и личным кабинетом
Удобный личный кабинет

Быстрый старт. Online отчеты

свинья копилка
Низкие цены

Надежность, качество, экономичная цена