НТК Интерфейс
ПО ОИК Диспетчер НТ. ПО клиент - инструкция по настройке
×
Меню
  • ПРИЛОЖЕНИЕ Б. Библиотека регулярных выражений

ПРИЛОЖЕНИЕ Б. Библиотека регулярных выражений

Библиотека регулярных выражений разработана А.В. Сорокиным (г. С-Петербург, anso@mail.ru). В ПО «ОИК Диспетчер НТ» включена версия v.938.2000.07.23.
Регулярные выражения используются при настройке расширенного фильтра отбора записей для просмотра ретроспективы событий (полной или по объекту) и записей в журнале тревог.
Представление шаблонов для отбора записей в виде регулярных выражений наиболее эффективный способ описания фильтров для отбора записей, представляющих собой строковые выражения. Алгоритм расширенного фильтра распространяется только на ту рабочую станцию, с которой это описание было введено. Для того, чтобы не вводить один и тот же алгоритм фильтрации для подобных в этом отношении рабочих станций, можно подменить файл WinDisp.ini в каталоге установки клиента.
Регулярное выражение – это строка символов, в которой описаны правила сравнения выбираемых из базы данных строк. Оно может включать символы, которые сравниваются один в один, а также метасимволы или метасимволы с модификаторами.
Перечень метасимволов приведен ниже:
\     - читать следующий символ буквально (кроме:d, D, w, W, s, S, n, t, r, f, x);
\\     - просто символ “\”;
^     - начало строки (\^ - просто символ “^”);
$     - конец строки;
.     - один произвольный символ (кроме конца строки);
|     - альтернатива логического ИЛИ;
()     - для выделения подвыражений. Подвыражения нумеруются слева направо, начиная с 1 (регулярное выражение в целом имеет номер 0);
[]     - один символ из указанного в скобках набора;
\d     - одна цифра;
\D     - одна не цифра;
\w     - алфавитно - цифровой символ или символ “_”;
\W     - не алфавитно - цифровой символ и не символ “_”;
\s     - пробельный символ;
\n     - конец строки;
\t     - табуляция;
\r     - перевод строки;
\f     - конец страницы;
\S     - не пробельный символ;
\xnn     - символ в шестнадцатеричном коде (если Unicode символа < 256);
\x{nnnn} - символ в шестнадцатеричном коде (для двухбайтных символов).
 
Примеры регулярных выражений, составленных с использованием метасимволов:
[а-я]          - любой символ из набора “малые русские символы” в Win1251;
[а-я0-9] - любой русский символ в нижнем регистре или цифра;
[+-]           - символ “+” или “-“;
[А-Я]     - все большие русские символы в Win1251;
[а-Я]      - все русские символы в Win1251.
 
Метасимволы могут иметь модификаторы, которые пишутся после метасимволов:
*     – предыдущий символ или группировка повторяется 0 или большее число раз {0,};
+     – предыдущий символ или группировка повторяется 1 или большее число раз {1,};
?     – предыдущий символ или группировка повторяется 0 или 1 раз - {0,1};
{n}     – повторяется n раз;
{n,}     – повторяется не менее n раз;
{n,m} – повторяется от n до m раз.
 
Метасимволы могут иметь модификаторы, которые указывают диапазон действия модификатора:
(?i)…(?-i)     - проверка символов без учёта регистра;
(?m)…(?-m)     - воспринимать входной фрагмент как многострочный, то есть метасимволы “^” и “$” совпадают с началом и концом строки внутри фрагмента (обычно – только с началом и концом фрагмента);
(?s)…(?-s)     - воспринимать входной фрагмент как единую строку – метасимвол “.” совпадает с любым символом, в том числе и с “\n” (обычно он не совпадает с “\n”). Можно комбинировать два последних модификатора:
s (без m) - заставит “^” совпадать только с началом фрагмента, а “$” – с концом;
ms вместе - позволят “.” совпадать со всеми символами включая начало строки внутри фрагмента, однако “^” и “$” при этом будут совпадать с началом и концом строки внутри фрагмента;
(?x)…(?-x)     - расширенный синтаксис, допускающий применение пробельных символов и комментариев для оформления регулярного выражения;
(?r)…(?-r)     - диапазон “а-я” включает символ “ё”, а диапазон “А-Я” – “Ë”.
 
Модификатор диапазона может содержать только признак начала действия, а признак конца действия модификатора при этом отсутствует.
Примеры регулярных выражений, составленных с использованием метасимволов и модификаторов:
\w+          - любое слово;
\d+          - любое целое число;
[+-]?\d+     - любое целое число со знаком или без знака;
[+-]?\d+\.,\d*     - любое число, у которого может быть дробная часть;
[-az]  [az-]  [a\-z]     - это идентичные перечни;
[\n-\x0D]     - перечень из 4-х символов – 10,11,12,13 (\n = \x0A);
[\d-t]          - любая цифра или t;
[]-a]          - любой символ из диапазона от «]» до «a»;
(?i)Saint-Petersburg          - совпадает с: saint-petersburg, saint-Petersburg, Saint-petersburg, Saint-Petersburg;
(?i)Saint-(?-i)Petersburg     - совпадает с Saint-Petersburg и saint-Petersburg;
(?i)(Saint-)?Petersburg     - совпадает с: saint-petersburg, saint-Petersburg, Saint-petersburg, Saint-Petersburg и Petersburg;
((?i)Saint-)?Petersburg     - совпадает с: saint-Petersburg, Saint-Petersburg и Petersburg, то есть диапазон действует только внутри скобок.
 
Правила составления регулярных выражений:
1.     Любой символ обозначает самого себя, если это не метасимвол. Для отмены действия метасимвола перед ним необходимо поставить символ «\»;
2.     Строка символов без метасимволов обозначает строку этих символов;
3.     Множество всевозможных символов (класс) заключенных в квадратные скобки означает, что в данном месте сравниваемой строки может быть один из символов, перечисленных в скобках. Если в качестве первого символа в скобках указан символ «^», то это означает, что ни один из символов, перечисленных в скобках не может быть на данном месте в выражении. Внутри класса можно использовать символ “-“, обозначающий диапазон символов, например, 0-9 – любая цифра. Метасимволы \w, \d и \s можно использовать в диапазонах;
4.     Альтернативные последовательности разделяются символом «|». Внутри квадратных скобок – это обычный символ;
5.     При наличии повторений внутри регулярного выражения можно указывать подвыражения. Описание подвыражения, заключая в круглые скобки и должно быть в выражении до первой ссылки на него. Ссылка на подвыражение имеет вид – \номер. Ссылка на первую скобку обозначается, как \1, вторую - \2 и так далее;
6.     Текст комментария “text” может быть включен следующим образом: (?#text). Концом комментария считается первый символ «)», поэтому нет никакой возможности использовать его внутри комментария.
 
Примеры регулярных выражений:
Вещественное число, например, 13.88е-4
([+-]?\d+(\.\d+)?([eE][+\-]?\d+)?)
Номер телефона, например, +7(095)555-5555    (3432)555-55-55   555-5555
((\+\d*)?(\(d{3,4}\)*)?\d+(-\d*)*)
e-mail адрес, например, igor@iface.ruigor@iface.e-burg.su
([_a-zA-Z\d\-]+)@\1(\.\1)+
Все ТС нулевого канала на КП №11      #ТС0:11:\d+
Все ТС нулевого канала, содержащие в имени строку символов «220» 
#ТС0:\d+:\d+.*220
ТС с 3 по 9, с 13 по 19 и 20 для КП с номером 4 из нулевого канала
#ТС0:4:(3|4|5|6|7|8|9|13|14|15|15|17|18|19|20)$ или то же самое
#ТС0:4:([3-9]|1[3-9]|20)$
при этом в настройке расширенного фильтра область действия должна быть – «Только ТМ адрес».