странное регулярное выражение работает в mySQL - PullRequest
0 голосов
/ 10 января 2020

Я потратил два часа, пытаясь понять это первым. Я проверил свое выражение на нескольких онлайн-сервисах регулярных выражений и на нескольких версиях mySQL. Я разделил изначально более сложное выражение на группы и выбрал то, что, по моему мнению, работает неправильно. Подскажите, пожалуйста, почему в mySQL 8.0.15 регулярное выражение работает так:

>select '(77' REGEXP '^((\.([0-9]+))?)$';

>1

Я думал \. может означать только точку (.), но на самом деле, любой символ. Где я не прав?

1 Ответ

0 голосов
/ 10 января 2020

( предлагаемый dup говорит о границах слов; этот вопрос больше касается обратной косой черты и точки.)

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

Кроме того, тестовый пример сбивает с толку, потому что точка совпадает с чем угодно, включая точку.

Одинаковые результаты по всем этим: MariaDB 10.0.28, MariaDB 10.1.43, MariaDB 10.2.30, MariaDB 10.3.21, MySQL 5.5.42, Percona 5.6.22, MySQL 8.0.17, Percona 5.5.45

Клиент был Perl с DBIx :: DWIW, что, возможно, делает минимальное количество удаления backsla sh.

Они успешны, за исключением отмеченного. Длина дает представление о том, сколько обратных косых черт было удалено к тому времени, когда MySQL видит это как строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...