# 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 дает мне эту ошибку и как я могу ее исправить?
Ответы
Ответ 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