2013-08-19 11 views
11

Mam problem z użyciem wyrażenia regularnego do wybrania niektórych wyników z mojej tabeli MySQL.# 1139 - Wystąpił błąd "operacja powtórzenia-operator niepoprawny" z regexp

Używam tej kwerendy

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

i mówi

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

Testowałem regex z Notepad ++ i to działa, dlaczego MySQL daje mi ten błąd i jak można to naprawić ?

+0

To nie będzie dobrze współpracować z każdym niewielkim budynku tabelach. – NullUserException

+0

@NullUserException Nie użyję tego wyboru więcej niż jeden raz, potrzebuję tego jeden raz, aby zobaczyć, które rekordy w mojej tabeli mają bezwzględne adresy URL dla obrazów zamiast względnych adresów URL i poprawić je, wtedy nie będę już tego potrzebować. – BackSlash

+0

Możesz spróbować 'LIKE '% ErickBest

Odpowiedz

29

Według MySQL manual

MySQL wykorzystuje implementację Henry'ego Spencera wyrażeń regularnych, który ma na celu osiągnięcia zgodności ze standardem POSIX 1003,2

POSIX regexes nie obsługują używania znaku zapytania ? jako nie -przygotowany (leniwy) modyfikator gwiazdy i dodatkowo kwantyfikatory takie jak PCRE (Perl Compatible Regular Expressions). Oznacza to, że nie można używać funkcji +? i *? Wygląda na to, że będziesz musiał użyć chciwej wersji, która powinna nadal działać. Aby uniknąć kojarzenia rzeczy jak <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">, można użyć zanegowane klasę postaci:

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

UWAGA: " nie musi uciec i .* na początku jest dorozumiany.

+0

That doesn't work. if i have '

-1

Można spróbować,

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

FROM articles ORDER BY date DESC 

Będzie to sprawdź najpierw na którym zawartość ma <img src="http:// jeśli nie znajdzie to będzie wyglądać na <img style= zamiast.

Mam nadzieję, że pomaga.

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

+0

Dlaczego _DownVote _? ... Proszę zostawić komentarz, jeśli twoje _DownVote_ jest oryginalne ... Pokój !! – ErickBest