2011-11-21 12 views
7

Sto cercando di ottenere gli URL per le immagini (tutti i tipi MIME) in un file CSS remoto utilizzando Java.Ottieni l'URL delle immagini nel file CSS utilizzando Java?

Sto usando jsoup per ottenere l'URL del css.

Dopo innumerevoli ore di guardare CSS Parser non riuscivo a capirlo a causa della mancanza di documentazione.

Ho anche guardato alcuni altri gradini, ma hanno solo a me ancora più confusa:

Ho visto anche alcuni esempi usando espressioni regolari, ma sono non troppo familiare come implementarlo in java.

Qualcuno avrebbe qualche suggerimento su come risolvere questo problema?

+0

Prova [CSS Parser] (http://cssparser.sourceforge.net/) –

+0

Hai bisogno di seguire riferimenti ricorsivi ad altri file CSS? È possibile utilizzare un'espressione regolare per trovare tutte le occorrenze di url(). –

+0

Sì, alla fine ho bisogno di ottenere riferimenti ad altri file CSS. Quale regex troverà tutte le occorrenze di url()? – pbojinov

risposta

6

In Java, è necessario utilizzare un Pattern e un Matcher dal pacchetto java.util.regex.

Si compila il modello, quindi si crea un'istanza con la stringa e quindi si cerca tutto ciò che corrisponde al modello.

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

I CSS 2.1 stati spec:

Il formato di un valore di URI è 'url (' seguito da uno spazio bianco opzionale seguito da un apostrofo (') o doppie virgolette (") carattere seguito dall'URI stesso, seguito da un carattere opzionale di virgoletta singola (') o doppia citazione (") seguito da spazio bianco opzionale seguito da') '. I due caratteri di citazione devono essere uguali.

Così si potrebbe usare un'espressione regolare come questo:

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

Il .*? è non-avido che permette di prendere il minor numero di caratteri, se necessario. Il quantificatore possessivo evita qualsiasi backtrack in ['"]?+.

+0

molto bello, l'hai inchiodato bene. il codice che ho scritto è quasi lo stesso tranne per la regex, che sto per testare proprio adesso. Volevo solo chiarire che abbinerà tutto ciò che c'è tra le parentesi all'interno delle parentesi? 'url ('dominio/link/images/graphic.png');' restituire 'dominio .../grafico.png' – pbojinov

+0

Sì, lo restituirà nel secondo gruppo corrispondente. – lkuty

0

Si può anche utilizzare ph-css per questo. Vedere l'esempio "Visita tutti gli URL contenuti in un CSS" situato a https://github.com/phax/ph-css#code-examples. Impossibile farlo molto più facilmente :)

+0

Ciao, come posso visitare solo gli URL delle immagini e non tutti gli URL? – nodwj

+0

Questo non è facilmente possibile perché per il parser un URL è un URL - forse puoi decidere il suffisso dell'URL. Se termina con ".jpg" o ".gif" piuttosto che un'immagine ... –

+0

In alternativa puoi verificare se 'declaration.getProperty() .equals (" background-image ")' ecc. (La dichiarazione è la seconda parametro di 'onUrlDeclaration') –

Problemi correlati