Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Регулярные выражения ошибка синтаксиса / 13 сообщений из 13, страница 1 из 1
28.03.2020, 05:00
    #39941820
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
есть выражение
Код: sql
1.
<img(?![^>]*\bclass\s*=)[^>]*>


но это выдает ошибку, делаю через phpmyadmin
выражение находит все картинки у которых нет атрибута class
...
Рейтинг: 0 / 0
28.03.2020, 12:16
    #39941855
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
Фридрих,

Показывайте полный запрос и полное сообщение об ошибке.
...
Рейтинг: 0 / 0
28.03.2020, 16:12
    #39941882
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
miksoft,

Код: sql
1.
SELECT *  FROM `posts` WHERE `content` REGEXP '<img(?![^>]*\\bclass\\s*=)[^>]*>' ORDER BY `id` ASC LIMIT 0, 25


ошибка
Код: sql
1.
#1139 - Получена ошибка 'repetition-operator operand invalid' от регулярного выражения


использую phpmyadmin
...
Рейтинг: 0 / 0
28.03.2020, 16:48
    #39941885
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
Вероятно, проблема в используемой версии сервера.

Регексп работает вполне нормально, по крайней мере, на MariaDB 10.1.43 и на MySQL 8.0.19 возвращает правильный результат:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
MariaDB [(none)]> select '<img src="/lalala.jpg">' REGEXP '<img(?![^>]*\\bclass\\s*=)[^>]*>';
+---------------------------------------------------------------------+
| '<img src="/lalala.jpg">' REGEXP '<img(?![^>]*\\bclass\\s*=)[^>]*>' |
+---------------------------------------------------------------------+
|                                                                   1 |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> select '<img src="/lalala.jpg" class="myclass">' REGEXP '<img(?![^>]*\\bclass\\s*=)[^>]*>';
+-------------------------------------------------------------------------------------+
| '<img src="/lalala.jpg" class="myclass">' REGEXP '<img(?![^>]*\\bclass\\s*=)[^>]*>' |
+-------------------------------------------------------------------------------------+
|                                                                                   0 |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)



А вот на MySQL 5.7.29 именно эта самая ошибка 1139 возвращается.
...
Рейтинг: 0 / 0
28.03.2020, 17:13
    #39941893
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
vkle,

а я не могу поменять версию, может как то переписать само выражение, хотя пишут что достаточно экранировать вопросительный знак, но и это не помогает, а базу проверить н,нада
...
Рейтинг: 0 / 0
28.03.2020, 18:13
    #39941899
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
Ну а что-нибудь попроще, вроде
Код: sql
1.
'<img[^>]+class=[^>]+>'

не дает правильный результат в данном конкретном случае?
...
Рейтинг: 0 / 0
28.03.2020, 18:30
    #39941901
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
vkle,

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select 'aa <img style="" /> ' REGEXP '<img[^>]+class=[^>]+>';
+-------------------------------------------------------+
| 'aa <img style="" /> ' REGEXP '<img[^>]+class=[^>]+>' |
+-------------------------------------------------------+
|                                                     0 |
+-------------------------------------------------------+
1 row in set (0.01 sec)


должно возвращать 1, так как нет атрибута class в элементе img.

проблема в том, что я не знаю как переделать "негативный просмотр вперед" -> ?!
вопросительный знак - проблема в данном случае, а писать скрипт на РНР как то в лом....
...
Рейтинг: 0 / 0
28.03.2020, 18:37
    #39941902
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
Инструкция по эксплуатации утверждает прямо противоположное:expr REGEXP pat, expr RLIKE pat

Returns 1 if the string expr matches the regular expression specified by the pattern pat, 0 otherwise. If either expr or pat is NULL, the return value is NULL.

Однако, если Вам нужна именно единица при несовпадении, то есть NOT REGEXP на такой случай.
Подойдет ли такой способ проверки в принципе для Вашего конкретного случая - это я затрудняюсь сказать. Предложил, только лишь как работающий в 5.7 вариант.
...
Рейтинг: 0 / 0
28.03.2020, 18:45
    #39941905
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
vkle,
не подойдет, т.к. в контенте могут быть несколько картинок, а not regex - просто меняет истину на лож
...
Рейтинг: 0 / 0
29.03.2020, 03:54
    #39941949
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
если кому интересно - то вот такой запрос находит все ID статей в которых есть картинки но не указан class...
пришлось писать костыль
Код: sql
1.
SELECT `id` FROM `posts` WHERE `content` REGEXP '<img[^>]+>' AND `content` NOT REGEXP '<img[^>]+class=[^>]+>' ORDER BY `id` ASC
...
Рейтинг: 0 / 0
29.03.2020, 05:42
    #39941950
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
только проблема в том что если несколько картинок, то отрабатывает первую картинку, а как сделать что работало на всех картинках!??? есть идеи?
...
Рейтинг: 0 / 0
29.03.2020, 10:15
    #39941966
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
вот нашел пример! не ахти, но рабочий
Код: sql
1.
SELECT `id` FROM `posts` WHERE `content` REGEXP '<img([^c]|c[^l]|cl[^a]|cla[^s]|clas[^s]|class[^=])*>' ORDER BY `id` ASC 
...
Рейтинг: 0 / 0
29.03.2020, 12:01
    #39941982
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения ошибка синтаксиса
Сама задача проверки/нахождения записей "с душком" одноразовая или периодическая?
Если разовая, так проще установить где угодно, хотя бы и на домашнем десктопе, подходящую свежую версию сервера, да слить туда табличку и отработать запрос.
Результат, как список id, можно в отдельной новой табличке сохранить и вернуть ее на целевой сервер.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Регулярные выражения ошибка синтаксиса / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]