Подтвердить что ты не робот

# 1139 - Получил ошибку "операнд-оператор повторения-оператора недействителен" из regexp

У меня возникли проблемы с использованием регулярного выражения для выбора некоторых результатов из моей таблицы MySQL.

Я использую этот запрос

SELECT text 
FROM `articles` 
WHERE content REGEXP '.*<img.*?src=\"http://www' 
ORDER BY date DESC

И он говорит

#1139 - Got error 'repetition-operator operand invalid' from regexp

Я тестировал регулярное выражение с Notepad ++, и он работает, почему MySQL дает мне эту ошибку и как я могу ее исправить?

4b9b3361

Ответ 1

В соответствии с руководство по MySQL

MySQL использует реализацию регулярных выражений Генри Спенсера, которая направлена ​​на соответствие POSIX 1003.2

POSIX regexes не поддерживают использование вопросительного знака ? как не жадного (ленивого) модификатора для звезд и кванторов как PCRE (регулярные выражения, совместимые с Perl). Это означает, что вы не можете использовать +? и *?

Похоже, вам просто нужно использовать жадную версию, которая все равно должна работать. Чтобы избежать сопоставления таких вещей, как <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">, вы можете использовать отрицательный класс символов:

'<img[^>]*src="http://www'

Примечание. " не нужно экранировать и подразумевается .* в начале.

Ответ 2

Вы можете попробовать,

SELECT 
        text 
        , 
     IF (content LIKE '%<img src="http://%', text  , content LIKE '%<img style=%') 
as imageText

FROM    articles ORDER BY date DESC

Вначале будет проверяться, где контент <img src="http://, если он не может найти, тогда он будет искать <img style= вместо этого.

Надеюсь, что это поможет.

Check Fiddle: http://sqlfiddle.com/#!2/6a2f0/13/0