Истина есть дочь времени, а не авторитета (Ф. Бэкон).

Новые функции регулярных выражений в MySQL 8.0

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Новые функции регулярных выражений в MySQL 8.0
В MySQL 8.0 вводится библиотека ICU для обработки поддержки регулярных выражений. Эта библиотека поддерживается консорциумом Unicode и используется на самых разнообразных на платформах. Причина использования библиотеки состоит из трех частей: безопасность, поддержка и функциональность Unicode. Библиотека ICU предлагает превосходную безопасность, ограничивая память и процессорное время. Вы можете настроить его, чтобы быть более либеральными, но по умолчанию параметры достаточно консервативны. Поддержка Unicode, как можно было бы ожидать, учитывая его происхождение, это лучшее, что вы могли бы получить. И, наконец, функциональность предлагает выходит за рамками простого ответа да/нет, соответствует ли или нет строки регулярных выражений.

Новые функции

MySQL теперь укомплектована следующими новыми функциями:

  • REGEXP_LIKE
  • REGEXP_INSTR
  • REGEXP_REPLACE
  • REGEXP_SUBSTR

REGEXP_LIKEпросто принимает строку «subject», шаблон, который компилируется в регулярное выражение, и необязательную строку параметров, об этом позже. Полная запись выглядит следующим образом:

 

В своих простейших формах, использовать его примерно так:

 

или даже

 

Как вы можете видеть, регулярные выражения в поиске MySQL может отличить суши от пива !

Вы будете правы, думая, что это выглядит подозрительно похоже на RLIKEи REGEXP. Эти операторы-затруднительного все еще существуют, но теперь они просто синтаксический сахар для REGEXP_LIKE.

Параметр match

Все функции регулярных выражений имеют общий аргумент, который всегда является последним в списке: match_parameterэто набор флагов, которые позволяют контролировать, как делается согласование. Он похож на флаги команды строки в том, что флаги являются бинарными, обрабатываются слева направо, и вы можете указать любое количество из них, но когда они вступают в противоречие, это последнее, что имеет значение. Для,REGEXP_LIKE, доступные флаги:

  • c – с учетом регистра соответствия
  • i – без учета регистра соответствия
  • m – включите согласование многострочным.
  • n – позволяет “.” соответствовать новой строке. Это не так по умолчанию.
  • u – признает только окончания строки Unix.

Вот некоторые примеры управления casing:

 

А вот некоторые из новой строки и многострочного соответствия:

 

Как контролировать чувствительность к регистру

Очевидно, что все функции регулярных выражений принимают объект и шаблон. Они обычно являются символьным типом, таким как CHAR, VARCHAR, TEXT или BLOB (хотя MySQL попытается интерпретировать значение любого типа, как обычно). Сопоставление будет искать Тип символов, определенных наборов символов субъекта и шаблона и параметров сортировки. Как мы уже сказали, поддерживается полный Unicode, например UTF-8 mb4. Параметры сортировки определяют чувствительность к регистру. Следовательно, у нас есть три способа определить чувствительность к регистру, и порядок приоритета

  1. Само регулярное выражение, то есть конструкция (?i), то есть без учета регистра соответствия.
  2. match_parameter.
  3. Сверка.

REGEXP_INSTRочень похоже, но это не просто возвращает 1 или 0. Скорее всего, это дает вам установку на соответствие, или 0, если нет. Кроме того, это дает вам несколько вариантов. Полная подпись:

 

Например, вы можете выбрать с какой позиции вы хотите начать поиск:

 

Вы также можете выбрать появление соответствия, что имеет значение:

 

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

 

В случае, если вы еще не догадались, 0 означает, что MySQL должен вернуть первую позицию соответствия, в то время как 1 означает позицию после соответствия.

REGEXP_REPLACEделает полную операцию поиска и замены. Полная запись

 

Безопасность

Можно писать регулярные выражения, которые, оставленные на их собственных устройствах, потребляли бы много процессорного времени или памяти, особенно используя вычислительные конструкции, такие как обратные ссылки. Это общеизвестный факт. Поэтому мы предлагаем два способа управления пространством/временем исполнения. Сказать “Привет” с regexp_stack_limit и regexp_time_limit. Эти глобальные переменные типа integer останавливают механизм регулярных выражений после достижения предела, поэтому оно не будет бесконечно использовать процессор или исчерпывать память. Вот несколько примеров.

 

 

 

Счастливый поиск, и, как всегда, спасибо  за использование MySQL!

 

Читайте также

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Простая логическая игра "Поймай кота". Задача игры окружить кота точками так, чтобы он не смог убежать с поля. Постигла неудача - начни игру снова!

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close