2013-08-19 39 views
11

Tôi gặp sự cố khi sử dụng cụm từ thông dụng để chọn một số kết quả từ bảng MySQL của tôi.# 1139 - Có lỗi 'toán tử lặp lại toán tử không hợp lệ' từ regexp

Tôi đang sử dụng truy vấn

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

này Và nó nói

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

Tôi đã thử nghiệm regex với Notepad ++ và nó hoạt động, tại sao MySQL là đem lại cho tôi lỗi này và làm thế nào tôi có thể sửa chữa nó ?

+0

Điều này sẽ không hoạt động tốt với bất kỳ bảng có kích thước vừa phải. – NullUserException

+0

@NullUserException Tôi sẽ không sử dụng lựa chọn này nhiều lần, tôi cần điều này một lần để xem bản ghi nào trong bảng của tôi có url tuyệt đối cho hình ảnh thay vì url tương đối và sửa chúng, sau đó tôi sẽ không cần nó nữa – BackSlash

+0

Bạn có thể thử 'LIKE '% ErickBest

Trả lời

29

Theo MySQL manual

MySQL sử dụng thực hiện Henry Spencer của biểu thức thông thường, mà là nhằm mục đích phù hợp với POSIX 1003,2

POSIX regexes không hỗ trợ bằng cách sử dụng dấu chấm hỏi ? như một tổ chức phi -greedy (lazy) modifier cho ngôi sao và cộng với quantifiers như PCRE (Perl tương thích Regular Expressions). Điều này có nghĩa là bạn không thể sử dụng +?*?

Có vẻ như bạn sẽ chỉ phải sử dụng phiên bản tham lam, phiên bản này vẫn hoạt động. Để tránh sự kết hợp của những thứ như <img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">, bạn có thể sử dụng một lớp nhân vật phủ nhận:

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

Lưu ý: Các " không nhất thiết phải bỏ trốn và .* lúc đầu được ngụ ý.

+0

That doesn't work. if i have '

-1

Bạn có thể thử,

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

FROM articles ORDER BY date DESC 

này sẽ kiểm tra đầu tiên cho nơi mà nội dung có <img src="http:// nếu nó không thể tìm thấy sau đó nó sẽ tìm kiếm <img style= để thay thế.

Hy vọng điều đó sẽ hữu ích.

Kiểm tra Fiddle: http://sqlfiddle.com/#!2/6a2f0/13/0

+0

Tại sao _DownVote _? ... Hãy để lại nhận xét nếu _DownVote_ của bạn là chính hãng ... Hòa bình !! – ErickBest

Các vấn đề liên quan