2013-08-19 24 views
11

我在使用正則表達式從我的MySQL表中選擇一些結果時遇到了問題。#1139 - 從正則表達式得到錯誤'重複運算符操作數無效'

我使用這個查詢

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

它說

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

我測試了正則表達式用記事本+ +和它的作品,爲什麼MySQL是給我這個錯誤,我該如何解決?

+0

這將不能很好地與任何中等規模的表工作。 – NullUserException

+0

@NullUserException我不會使用這個選擇不止一次,我需要這一次,看看我的表中有哪些記錄有圖像的絕對URL而不是相對URL並修復它們,那麼我將不再需要它 – BackSlash

+0

你可以嘗試''LIKE'% ErickBest

回答

29

按照MySQL manual

MySQL採用Henry Spencer的正則表達式實施,其目標是符合POSIX 1003.2

POSIX regexes不支持使用問號?作爲非-greedy(惰性)修飾符,加上星號和PCRE(Perl Compatible Regular Expressions)等量詞。這意味着你不能使用+?*?

它看起來像你只需要使用貪婪的版本,它應該仍然工作。爲了避免類似事情的<img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">匹配,你可以使用一個否定的字符類:

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

注:"不必逃跑而.*之初是隱含的。

+0

That doesn't work. if i have '

-1

你可以試試,

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=檢查。

希望它有助於。

檢查小提琴:http://sqlfiddle.com/#!2/6a2f0/13/0

+0

爲什麼選擇_DownVote _?...如果您的_DownVote_是真的,請留下評論...和平! – ErickBest

相關問題