web-dev-qa-db-fra.com

# 1139 - Erreur "Opérande d'opérateur de répétition invalide" dans l'expression rationnelle

Je ne parviens pas à utiliser une expression régulière pour sélectionner des résultats dans ma table MySQL.

J'utilise cette requête

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

Et ça dit

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

J'ai testé regex avec Notepad ++ et ça marche, pourquoi MySQL me donne cette erreur et comment puis-je la réparer?

15
BackSlash

Selon le Manuel MySQL

MySQL utilise l'implémentation d'expressions régulières de Henry Spencer, qui vise la conformité avec POSIX 1003.2.

Les expressions rationnelles POSIX ne prennent pas en charge l’utilisation du point d’interrogation ? en tant que modificateur non glouton (lazy) de l’étoile et des quantificateurs, tels que PCRE (expressions régulières compatibles Perl). Cela signifie que vous ne pouvez pas utiliser +? et *?

Il semble que vous deviez simplement utiliser la version gourmande, qui devrait toujours fonctionner. Pour éviter la correspondance d'éléments tels que <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">, vous pouvez utiliser une classe de caractères inversée:

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

Remarque: Le " n'a pas à s'échapper et le .* au début est impliqué.

36
NullUserException

Tu peux essayer,

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

FROM    articles ORDER BY date DESC

Cela vérifiera d’abord où le contenu a <img src="http:// s’il ne le trouve pas, il cherchera plutôt <img style=.

J'espère que ça aide.

Vérifiez Fiddle: http://sqlfiddle.com/#!2/6a2f0/13/0

0
ErickBest