2011-11-21 32 views
7

Tôi đang cố gắng lấy URL cho hình ảnh (tất cả các loại MIME) trong một tệp CSS từ xa bằng cách sử dụng Java.Nhận URL hình ảnh trong tệp CSS bằng Java?

Tôi đang sử dụng jsoup để nhận URL của css.

Sau vô số giờ xem CSS Parser Tôi không thể tìm ra được do thiếu tài liệu.

Tôi cũng xem xét một số treads khác, nhưng vừa bối rối tôi thậm chí nhiều hơn:

Tôi cũng đã nhìn thấy một số ví dụ sử dụng regex, nhưng tôi không quá quen thuộc làm thế nào để thực hiện nó trong java.

Có ai có một số đề xuất về cách khắc phục sự cố này không?

+0

Hãy thử [Trình phân tích cú pháp CSS] (http://cssparser.sourceforge.net/) –

+0

Bạn có cần theo dõi các tham chiếu đệ quy đến các tệp CSS khác không? Bạn có thể sử dụng cụm từ thông dụng để tìm tất cả các lần xuất hiện url(). –

+0

Có, tôi cuối cùng cũng cần tham khảo các tệp CSS khác. Regex nào sẽ tìm thấy tất cả url() xuất hiện? – pbojinov

Trả lời

6

Trong Java, bạn phải sử dụng số PatternMatcher từ gói java.util.regex.

Bạn biên dịch mẫu của mình, sau đó bạn tạo nhanh trình phù hợp với chuỗi của mình và sau đó bạn tìm mọi thứ phù hợp với mẫu của bạn.

Pattern p = Pattern.compile("..."); 
Matcher m = p.matcher("your CSS file as a String"); 
while (m.find()) { 
    // Here use m.group(), m.group(1), ... 
} 

CSS 2.1 bang spec:

Định dạng của một giá trị URI là 'url (' tiếp theo không gian trắng tùy chọn tiếp theo là một dấu nháy đơn bắt buộc (') hoặc nháy kép (") ký tự được theo sau bởi chính URI, theo sau là một dấu nháy đơn (') hoặc dấu ngoặc kép (") tùy chọn theo sau là khoảng trắng tùy chọn, sau đó là') '. Hai ký tự trích dẫn phải giống nhau.

Vì vậy bạn có thể sử dụng một regex như thế này:

url\(\s*(['"]?+)(.*?)\1\s*\) 

Các .*? là không tham lam cho phép bạn mang theo vài ký tự khi cần thiết. Định lượng sở hữu tránh bất kỳ backtrack nào trong ['"]?+.

+0

rất đẹp, bạn đóng đinh nó ngay trên. mã tôi đã viết là gần như giống nhau, ngoại trừ regex, mà tôi sắp thử nghiệm ngay bây giờ. Chỉ muốn làm rõ rằng nó sẽ phù hợp với mọi thứ giữa '' bên trong dấu ngoặc đơn chính xác? 'url ('domain/link/images/graphic.png');' sẽ trả về 'domain .../graphic.png' – pbojinov

+0

Có, nó sẽ trả về trong nhóm khớp thứ hai. – lkuty

0

Bạn cũng có thể sử dụng ph-css cho việc này. Xem ví dụ "Truy cập tất cả URL có trong CSS" nằm tại https://github.com/phax/ph-css#code-examples. Không thể làm điều đó dễ dàng hơn nhiều :)

+0

Xin chào, làm cách nào tôi chỉ có thể truy cập URL của hình ảnh chứ không phải tất cả URL? – nodwj

+0

Điều này không dễ dàng bởi vì đối với trình phân tích cú pháp URL là một URL - có thể bạn có thể quyết định hậu tố của URL. Nếu nó kết thúc bằng ".jpg" hoặc ".gif" thay vì nó là hình ảnh ... –

+0

Hoặc bạn có thể kiểm tra nếu 'declaration.getProperty() .equals (" background-image ")' vv (khai báo là thứ hai tham số của 'onUrlDeclaration') –

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