Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188

    RE per estrarre estensione file

    Eccomi ancora alle prese con le RE.

    Oggi ho un problema che da solo non riesco a risolvere.

    Data una lista di file, che pero` comprendono path complete (quindi con anche dei possibili punti dentro il path o all'inizio, vorrei estrarre l'estensione dei file. Il problema e` che questi file sono estratti da pagine web, per cui possono anche avere un ? (e successivi parametri) dopo l'estensione.

    Magari e` una cosa impossibile, ed occorre procedere spezzando la stringa, ma una soluzione con una RE sarebbe piu` elegante e compatta.

    Alcuni esempi di path (non esaustivi):
    /ministero/sezMinistero_files/frecciamenu1.gif
    ../sezMinistero_files/frecciamenu1.gif
    /ministero/sezMinistero_files//frecciamenu1.gif
    /ministero/sezMinistero_files/frecciamenu1
    /ministero/sezMinistero_files/frecciamenu1.gif?var=1
    /ministero/sezMinistero_files/frecciamenu1?var=1&pinco=ciao
    ../sezMinistero.img/frecciamenu1?var=1&pinco=ciao

    Dovrebbe estrarre l'estensione (dove c'e`) oppure la stringa vuota

    Ho provato:
    /\.([^\?]*)/ # estrae dal primo . al ? (se presente)
    /[\/\\]*.+\.([^\?]*)/ # estrae sempre dal primo .

    Grazie a tutti.
    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  2. #2
    Utente di HTML.it L'avatar di Kintaro
    Registrato dal
    Dec 2000
    Messaggi
    188
    prova un po'..
    non ho fatto altre prove a parte gli esempi, quindi... boh

    @path= (
    '/ministero/sezMinistero_files/frecciamenu1.gif',
    '../sezMinistero_files/frecciamenu1.gif',
    '/ministero/sezMinistero_files//frecciamenu1.gif',
    '/ministero/sezMinistero_files/frecciamenu1',
    '/ministero/sezMinistero_files/frecciamenu1.gif?var=1',
    '/ministero/sezMinistero_files/frecciamenu1?var=1&pinco=ciao',
    '../sezMinistero.img/frecciamenu1?var=1&pinco=ciao'
    );

    foreach (@path) {
    /\.(\w{3,4})\z|\.(\w{3,4})\?/;
    print "--> $+\n";
    }
    Imparo! Imparo! Imparo!

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Grazie Kintaro.

    Ho apportato delle modifiche (sul campo ho trovato che underscore era uno dei limitatori), ma la struttura e` quella giusta:
    codice:
    /\.(\w{3,7})$|\.(\w{3,7})\?|\.(\w{3,7}?)\_/;

    Una sola cosa non mi piace il dare limiti numerici alle estensioni (ci sono estensioni lunghe, ed anche estensioni piu` corte).

    Forse questa e` quella definitva?
    codice:
    /\.([^\?\_]*)$|\.([^\?\_]*)[\?\_]/;
    L'ho sperimentata, e sui dati che ho ora sembra funzionare

    Ciao e ancora grazie.
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  4. #4
    Utente di HTML.it L'avatar di Kintaro
    Registrato dal
    Dec 2000
    Messaggi
    188
    a naso l'ultima sballa se c'è più di un punto nel nome del file, mi pare strano funzioni anche con questo: '../sezMinistero.img/frecciamenu1?var=1&pinco=ciao'

    non ho provato però..

    hai ragione, esisto estensioni da 1 (.c) da 2 (.pl) da 3 e 4, ma non me ne vengono in mente da 5 in su

    l'underscore non necessita di backslash


    Imparo! Imparo! Imparo!

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Hai ragione, se ci sono altri punti non funziona. Ho provato ora.
    Tornero` indietro ai tuoi consigli. Grazie comunque dell'aiuto.


    Per quanto riguarda le estensioni.

    E` un concetto che nasce dal CP/M, e` stato sviluppato dai SO della Digital, poi e` stato ripreso e reso obbligatorio dal MS-DOS, e mantenuto in Windows.

    All'inizio erano tre caratteri alfabetici obbligatori (2 byte nei sistemi CP/M, tre nei vari DOS), poi non ci sono state limitazioni.

    Nei sistemi unix (come pure nei mac), l'estensione era (ed e` tuttora) semplicemente un'aggiunta di un punto e di altri caratteri nel nome: una specie di mnemonico per ricordare cosa contiene un file, tanto e` vero che si posso usare estensioni a piacere.
    Ad esempio nei fogli di lavoro di linux, l'estensione standard e` .gnumeric (8 caratteri)

    Nei sistemi windows l'estensione e` l'elemento che dice al SO con che applicativo aprire un file, per cui e` obbligatoria, mentre nei mac ad ogni file e` associato un record nel filesystem (in pratica un altro file in una sottodir nascosta) che definisce tutta una serie di caratteristiche del file, tra cui il programma con cui va aperto.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ultima prova:
    codice:
    /\.([^\?_\/\.]+)$|\.([^\?_\/\.]+)[\?_]/;
    (ho trovato file con estensione doppia: prende solo l'ultima).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.