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


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

Показывайте полный запрос и полное сообщение об ошибке.
...
Рейтинг: 0 / 0
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #39941893
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

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

не дает правильный результат в данном конкретном случае?
...
Рейтинг: 0 / 0
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #39941905
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,
не подойдет, т.к. в контенте могут быть несколько картинок, а not regex - просто меняет истину на лож
...
Рейтинг: 0 / 0
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #39941950
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только проблема в том что если несколько картинок, то отрабатывает первую картинку, а как сделать что работало на всех картинках!??? есть идеи?
...
Рейтинг: 0 / 0
Регулярные выражения ошибка синтаксиса
    #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
Регулярные выражения ошибка синтаксиса
    #39941982
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сама задача проверки/нахождения записей "с душком" одноразовая или периодическая?
Если разовая, так проще установить где угодно, хотя бы и на домашнем десктопе, подходящую свежую версию сервера, да слить туда табличку и отработать запрос.
Результат, как список id, можно в отдельной новой табличке сохранить и вернуть ее на целевой сервер.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Регулярные выражения ошибка синтаксиса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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