Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [help] - regex

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    28

    [help] - regex

    Buona sera a tutti,

    è il mio primo post nel forum,

    da premettere che sono un newbie in perl e quindi del mondo delle espressioni regolari

    stò lavorando e/o studiando pacchetti IP e mi serve un consiglio su come poter scrivere una espressione regolare che mi estrapoli da alcune righe contenute in un file di testo una certa stringa, quindi,

    ho il mio file di testo e riesco ad accedere a tutte le righe di cui esso è composto, il problema è che ad esempio se ho una riga del genere

    A0 56 77 F6 2B__........skssk

    dove gli underscore sono 2 segni di spaziatura

    come posso scrivere la regex che praticamente mi verifica la riga e quando incontra i due segni di spaziatura (nel mio caso gli underscore) mi salva il contenuto che ha trovato precedentemente , quindi questo nel mio caso (A0 56 77 F6 2B) e non considera tutto il resto (__........skssk)?


    quindi salvare solamente una parte dell'informazione

    a me serve solo la sintassi della regex, per il resto credo di sapermela cavare, ringrazio in anticipo per la risposta.

    sò che è semplice ma stò sclerando lo stesso

    e grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Le RegExp sono una brutta bestia: potentissime e semplicissime quando si conoscono, un bel rompicapo all'inizio.

    Ecco una espressione che ti potrebbe essere utile:
    codice:
    /(([\dA-Fa-f]{2} )*[\dA-Fa-f])  /
    Nota che la prima parentesi e` quella che vuoi ricuperare, mentre la seconda serve solo internamente.
    Quindi il risultato lo recuperi con $1.
    Dopo la chiusaparentesi ci sono due spazi, ma puoi usare anche \s{2}

    Poi dipende anche da cosa c'e` dopo (se qualcosa significativo o no), e se per caso c'e` qualcosa prima.
    Io ho supposto che i numeri siano valori esadecimali.
    Al posto di [\dA-Fa-f] puoi usare anche [\da-f] se metti il /i alla fine.

    Se hai le Extended RE puoi anche fare in modo che la seconda parentesi non venga salvata, ma forse non ti serve.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    28
    grazie mille,

    sembra arabo in effetti, con la tabella della sintassi delle regex però l'ho dedotta,

    avevo risolto praticamente scrivendo più o meno una decina di linee di codice, gli facevo prima riconoscere la parte esadecimale e in quel caso analizzavo la riga,

    a questo punto estraevo la sottostringa che mi interessava fino alla per esempio 48esima colonna (visto che al massimo lì termina una riga esadecimale, il resto non mi interessa, è la traduzione dei caratteri dell'esadecimale, ma stranamente ad esempio il "." lo riporta in esadecimale scritto in diverse maniere, stranissimo visto che la corrispondenza carattere esadecimale - sua descrizione dovrebbe essere 1 a 1, mah ),

    l'unico inconveniente che riscontro è che così mi vengono salvate nella sottostringa anche gli spazi vuoti quando una riga contiene per esempio solamente 3 parti esadecimali, non sò se mi sono spiegato,

    comunque ora provo la tua regex, sembra interessante ed efficiente soprattutto

    grazie ancora

    ciao

  4. #4
    ma che differenza c'è se facessi:

    codice:
    ($hex, undef) = split("__",$riga);
    Alla batteria dai retta,balla!

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    28
    Sera a tutti,

    come posso far riconoscere con una espressione regolare un carattere esadecimale ad otto cifre tipo questo? "0xAEADB38C"

    grazie in anticipo

    ciao

  6. #6
    /^0x[a-fA-F0-9]{8}$/
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    28
    grazie

    avevo risolto così /(0x[0-9A-F]+)/

    c'è differenza a livello di efficienza nell'usare il + alla fine e non {8}?

    ciao

  8. #8
    + significa "uno o più (senza limite) caratteri"
    {8} significa "esattamente 8 caratteri"
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

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.