Приднестровская поддержка XOOPS
Синтаксис, используемый в регулярных выражениях MySQL, похож на используемый в PHP и в JavaScript. В регулярных выражениях может встречаться ряд метасимволов.
□ ^ — привязка к началу строки.
□ $ — привязка к концу строки.
Привязки работают так:
SELECT '2' RLIKE '^[0-9]+$';
/* Выведет: 1 */
SELECT 'Строка2' RLIKE '^[0-9]+$';
/* Выведет: 0 */
Если убрать привязку к началу и концу строки, то любая строка, содержащая цифру, вернет 1:
SELECT 'Строка2' RLIKE '[0-9]+';
/* Выведет: 1 */
Можно указать привязку только к началу или только к концу строки:
SELECT 'Строка2' RLIKE '[0-9]+$';
/* Есть цифра в конце строки, значит выведет: 1 */
SELECT 'Строка2' RLIKE '^[0-9]+';
/* Нет цифры в начале строки, значит выведет: 0 */
Регулярное выражение '^$' соответствует пустой строке. Если необходимо найти значение NULL, то следует использовать не регулярные выражения, а операторы IS NULL и IS NOT NULL.
□ [[:<:]] — привязка к началу слова.
□ [[:>:]] — привязка к концу слова.
SET NAMES 'cp1251';
SELECT 'в середине строки' RLIKE '[[:<:]]середине[[:>:]]';
/* Выведет: 1 */
При работе с русским языком необходимо правильно настроить кодировку. Если кодировка соединения будет latin1, то поиск вернет значение 0, а не 1.
□ Квадратные скобки ([]) позволяют указать символы, которые могут встречаться на этом месте в строке. Можно перечислять символы подряд или указать диапазон через тире:
• [09] — цифра 0 или 9;
• [0-9] — любая цифра от 0 до 9;
• [абв] — буквы "а", "б" или "в";
• [а-г] — буквы "а", "б", "в" или "г";
• [а-яё] — любая буква от "а" до "я";
• [0-9а-яёa-z] — любая цифра и любая буква независимо от языка.
Значение можно инвертировать, если после первой скобки указать символ ^. Таким образом можно указать символы, которых не должно быть на этом месте в строке:
• [^09] — не цифра 0 и не цифра 9;
• [^0-9] — не цифра от 0 до 9;
• [^а-яёa-z] — не буква.
Поиск выполняется без учета регистра символов. Чтобы учитывался регистр, необходимо указать ключевое слово BINARY:
SELECT 'String' RLIKE '^[a-z]+$';
/* Выведет: 1 */
SELECT 'String' RLIKE BINARY '^[a-z]+$';
/* Выведет: 0 */
Следует заметить, что учет регистра русских букв зависит от настройки кодировки.
SET NAMES 'cp866';
SELECT 'Строка' RLIKE '^[а-яё]+$';
/* Выведет: 1 */
SET NAMES 'cp1251';
SELECT 'Строка' RLIKE '^[а-яё]+$';
/* Выведет: 0 */
SET NAMES 'latin1';
SELECT 'Строка' RLIKE '^[а-яё]+$';
/* Выведет: 0 */
Как видно из примера, с кодировкой cp1251 также возникла проблема. По
этой причине в регулярных выражениях для русских букв стоит учиты-
вать регистр:
SET NAMES 'cp1251';
SELECT 'Строка' RLIKE '^[А-ЯЁа-яё]+$';
/* Выведет: 1 */
Вместо перечисления символов можно использовать стандартные классы:
• [[:alnum:]] — алфавитно-цифровые символы;
• [[:alpha:]] — буквенные символы;
• [[:lower:]] — строчные буквы;
• [[:upper:]] — прописные буквы;
• [[:digit:]] — десятичные цифры;
• [[:xdigit:]] — шестнадцатеричные цифры;
• [[:punct:]] — знаки пунктуации;
• [[:blank:]] — символы табуляции и пробелов;
• [[:space:]] — символы пробела, табуляции, новой строки или возврата каретки;
• [[:cntrl:]] — управляющие символы;
• [[:print:]] — печатные символы;
• [[:graph:]] — печатные символы, за исключением пробельных;
• . (точка) — любой символ.
Что же делать, если нужно найти точку, ведь символ "точка" соответствует любому символу? Для этого перед специальным символом необходимо указать два символа \ (\\.).
SELECT '26,03.2008' RLIKE
'^[0-3][[:digit:]].[01][[:digit:]].[12][09][[:digit:]][[:digit:]]$';
/* Поскольку точка означает любой символ, выведет: 1 */
SELECT '26,03.2008' RLIKE
'^[0-3][[:digit:]]\\.[01][[:digit:]]\\.[12][09][[:digit:]][[:digit:]]$';
/* Поскольку перед точкой указаны символы "\", выведет: 0 */
Если символ "точка" указан внутри квадратных скобок, то он теряет свое специальное значение:
SELECT '26.03.2008' RLIKE
'^[0-3][[:digit:]][.][01][[:digit:]][.][12][09][[:digit:]][[:digit:]]$';
/* Выведет: 1 */
SELECT '26,03.2008' RLIKE
'^[0-3][[:digit:]][.][01][[:digit:]][.][12][09][[:digit:]][[:digit:]]$';
/* Выведет: 0 */
Количество вхождений предшествующего символа или выражения в строку задается с помощью квантификаторов:
□ {n} — n вхождений символа (выражения) в строку:
[[:digit:]]{2} — соответствует двум вхождениям любой цифры;
□ {n,} — n или более вхождений символа в строку:
[[:digit:]]{2,} — соответствует двум и более вхождениям любой цифры;
□ {n,m} — не менее n и не более m вхождений символа в строку. Цифры указываются через запятую без пробела:
[[:digit:]]{2,5} — соответствует двум, трем, четырем или пяти вхождениям любой цифры;
□ * — любое число вхождений символа в строку, в том числе ни одного:
[[:digit:]]* — цифры могут не встретиться в строке или встретиться много раз;
□ + — как минимум одно вхождение символа в строку:
[[:digit:]]+ — цифра может встретиться один или много раз;
□ ? — одно или ни одного вхождения символа в строку:
[[:digit:]]? — цифра может встретиться один раз или не встретиться совсем.
Для указания количества вхождений нескольких символов используются круглые скобки:
SELECT '121212' RLIKE '^(12){3}$';
/* Выведет: 1 */
Также можно искать одно из двух выражений:
□ n|m — один из символов (выражений) n или m:
красн(ая)|(ое) — красная или красное, но не красный, например SELECT 'красная' RLIKE 'красн(ая)|(ое)';
/* Выведет: 1 */
Отправитель | Нити |
---|
8 пользователь(ей) активно (4 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 8 далее... |