2013-08-19 12 views
11

Non riesco a utilizzare un'espressione regolare per selezionare alcuni risultati dalla mia tabella MySQL.# 1139 - Errore ottenuto 'operando operatore ripetizione non valido' da espressione regolare

sto usando questa query

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

e dice

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

ho provato la regex con Notepad ++ e funziona, perché MySQL mi sta dando questo errore e come posso risolvere il problema ?

+0

Questo non funziona bene con tutte le tabelle di dimensioni moderatamente. – NullUserException

+0

@NullUserException Non userò questa selezione più di una volta, ho bisogno di questa volta per vedere quali record nella mia tabella hanno url assoluti per immagini invece di url relativi e risolverli, quindi non ne avrò più bisogno – BackSlash

+0

Puoi provare 'LIKE '% ErickBest

risposta

29

Secondo il MySQL manual

MySQL utilizza l'implementazione di Henry Spencer di espressioni regolari, che si rivolge a conformità POSIX 1003,2

POSIX regexes non supportano utilizzando il punto interrogativo ? come un non -greedy (pigro) modificatore alla stella e più quantificatori come PCRE (Perl Compatible Regular Expressions). Ciò significa che non è possibile utilizzare +? e *?

Sembra che dovrai solo utilizzare la versione golosa, che dovrebbe comunque funzionare. Per evitare l'accostamento di cose come <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">, è possibile utilizzare una classe di caratteri negata:

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

Nota: La " non deve sfuggito e la .* all'inizio è implicito.

+0

That doesn't work. if i have '

-1

Si può provare,

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

FROM articles ORDER BY date DESC 

Questo controllerà prima per cui il contenuto ha <img src="http:// se non riesce a trovare allora cercherà <img style= invece.

Spero che aiuti.

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

+0

Perché _DownVote _? ... Lascia un commento se il tuo _DownVote_ è autentico ... Pace !! – ErickBest

Problemi correlati