вторник, 19 марта 2019 г.

MiniM. Полезные регулярные выражения

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

В определении языка MUMPS не содержится поддержка регулярных выражений. Ближайшим к ним понятием являются шаблоны сопоставления (patterns). Для расширения возможностей серверов приложений построенных на MiniM Database Server введены дополнительные системные функции:
  • $ZPCREM[ATCH] для проверки соответствия строки регулярному выражению
  • $ZPCRES[EARCH] для поиска в строке указанных регулярным выражением вхождений
  • $ZPCRER[EPLACE] для замены по указанному регулярному выражению
Префикс PCRE обозначает Perl Compatible Regular Expressions. Эти функции построены на библиотеке pcre. Ниже приводятся некоторые из полезных регулярных выражений.

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

Удалить лидирующие пробелы
USER>s str="  abc  def  "

USER>s regexp="^\s+"

USER>w """",$zpcrer(str,regexp,""),""""
"abc  def  "
Удалить завершающие пробелы
USER>s str="  abc  def  "

USER>s regexp="\s+$"

USER>w """",$zpcrer(str,regexp,""),""""
"  abc  def"
Удалить лидирующие и завершающие пробелы
USER>s str="  abc  def  "

USER>s regexp="^\s+|\s+$"

USER>w """",$zpcrer(str,regexp,"","g"),""""
"abc  def"
Удалить повторяющиеся пробелы между словами не трогая лидирующих и завершающих
USER>s str="  abc  def  "

USER>s regexp="(\w)( )+(\w)"

USER>w """",$zpcrer(str,regexp,"$1 $3","gp"),""""
"  abc def  "
Заменить последовательности двух и более пробелов на одиночный с удалением лидирующих и завершающих пробелов
USER>s str="  abc  def  "

USER>s regexp="^\s+|(?<=\s)( )+|\s+$"

USER>w """",$zpcrer(str,regexp,"","g"),""""
"abc def"
Удалить с начала строки все небуквенные символы
USER>s str="  abc  def  "

USER>s regexp="^([[:^alpha:]])+"

USER>w """",$zpcrer(str,regexp,""),""""
"abc  def  "
Получить список всех последовательностей цифр
USER>s str=" 123 789.as456ee333"

USER>s regexp="\d+"

USER>s found=$zpcres(str,regexp,"g")

USER>f i=1:1:$ll(found) w $lg(found,i),!
123
789
456
333
Простая проверка IP адреса
USER>s regexp="^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"

USER>w $zpcrem("127.0.0.1",regexp),!
1

USER>w $zpcrem("222.333.444.555",regexp),!
1
Полная проверка IP адреса
USER>s r="^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$"

USER>w $zpcrem("127.0.0.1",r),!
1

USER>w $zpcrem("222.333.444.555",r),!
0

Комментариев нет:

Отправить комментарий