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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метасимволы

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

а) . точка

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

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

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

Класс

Эквивалент

Значение

[:upper:]

[A-Z] или [А-Я]

Символы верхнего регистра

[:lower:]

[a-z] или [а-я]

Символы нижнего регистра

[:alpha:]

[[:upper:][:lower:]]

Буквенные символы

[:digit:]

[0-9]

Цифровые символы

[:xdigit:]

[[:digit:]A-Fa-f]

Шестнадцатеричные

[:alnum:]

[[:alpha:][:digit:]]

Буквы и цифры

[:punct:]

[-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~]

Знаки пунктуации

[:blank:]

Пробел и табуляция

[:space:]

Пробел, табуляция, перенос строки, перевод каретки, разрыв страницы и др.

[:cntrl:]

Управляющие символы

[:graph:]

Печатные символы

[:print:]

[[:graph:] ]

Печатные символы и пробелы

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

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

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

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

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

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

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

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

Метасимвол

Описание

|

Или

перечень альтернативных значений

( )

Группа

Группировка выражений, например альтернативных значений

[char]

Список

Список список символов, не требует запятой при перечислении ([abc], не [a,b,c]), может включать интервалы [a-d] аналогично [abcd] или альтернативные варианты [a-c |x-z|0-9]

[^char]

Список

Список символов, которые отсутствуют в строке. Если символ ^ стоит не сразу после скобки, он будет интерпретирован как литеральный, а не как отрицание

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

Квантификатор

Встречается

Описание

*

0 или более раз

ab*c соответствует ac, abc, и abbc, но не соответствует abb

?

0 или 1 раз

ab?c соответствует abc и ac, но не соответствует abbc

+

1 или более раз

a+ соответствует a, aa и aaa, но не соответствует bbb

{m}

точно m раз

a{2} соответствует aa, но не a

{m,}

как минимум m раз

a{3, } соответствует aaa или aaaa, но не соответствует aa

{m,n}

от m до n раз

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:]])

чтобы слово было найдено, написано ли оно в начале строки или после пробела

[еия]

в квадратных скобках указываем варианты падежных окончаний.

Мобильный оператор «СМАРТС» продан компаниям «Мегафон» и «МТС»

Мобильный оператор «СМАРТС» продан компаниям «Мегафон» и «МТС»

Мобильный оператор "Смартс" с 1 февраля 2016 года присоединился к мобильным операторам "Мегафон" и "МТС".

Изменение цен на СМС рассылку по оператору Мегафон

Изменение цен на СМС рассылку по оператору Мегафон

Компания Мегафон повышает цены на СМС сообщения для коммерческих клиентов.

МТС меняет тарифные планы

МТС меняет тарифные планы

С 1 января 2016 года по инициативе оператора МТС изменяется цена на СМС сообщения для корпоративных клиентов

ТЕЛЕ2 меняет тарифные планы

ТЕЛЕ2 меняет тарифные планы

Компания предлагает своим клиентам отправлять СМС-сообщения на новых условиях