Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [RegExp] Aiuto numeri e spazi

    salve,
    devo parsare dei dati contenuti in un file di testo fornito (quindi la struttura dei dati è quella e non si può cambiare ).
    I primi 5 caratteri di una riga rappresentano un numero che può essere da 1 a 5 cifre, se il numero è più corto di 5 cifre la cifra mancante viene sostituita da uno spazio. Ora metto degli _ per farvi capire, altrimenti nn funzionerebbe con gli spazi.

    Numero 5 cifre => 12345
    Numero con meno di 5 cifre => ___12

    Veniamo ora al problema, come posso fare una regexp che mi selezioni solo il numero senza gli spazi, sapendo che la stringa deve essere per forza 5 caratteri e non può esserci una situazione del tipo _2_45.

    Spero di essermi spiegato.
    Grazie
    «Non esiste mondo fuor dalle mura di Verona; ma solo purgatorio, tortura, inferno. Chi è bandito di qui, è bandito dal mondo e l'esilio dal mondo è morte...»
    - William Shakespeare -

  2. #2
    Perchè non puoi usare un semplice substr() + trim()?

  3. #3
    si, lo sò che sarebbe molto semplice cosi...
    solo che non posso per esigenze devo farlo con la regExp....

    [edit]
    e cmq anche facendo substr() + trim() il problema dello spazio tra due numeri rimane...
    «Non esiste mondo fuor dalle mura di Verona; ma solo purgatorio, tortura, inferno. Chi è bandito di qui, è bandito dal mondo e l'esilio dal mondo è morte...»
    - William Shakespeare -

  4. #4
    Come complicarsi la vita ...

    Codice PHP:
    <pre>
    <?php 
    $pattern 
    '#((\\d{5})| (\\d{4})|  (\\d{3})|   (\\d{2})|    (\\d))#';

    $number false;
    $string '12345';
    if (
    preg_match($pattern$string$matches)) {
        
    $number = (int) array_pop($matches);
    }

    var_dump($number);

    ?>
    </pre>

  5. #5
    non volevo star li a scrivere tutte le combinazioni..hai ragione anche te se mi dici che non l'ho scritto...
    anche perchè un esempio di testo da parsare è:
    codice:
     
      962  280  0 #  149 | 0:2454_:[..C]C-----G[..G]:2438_:0  0.60  0.33  8.68  8.94 -0.25
    quindi capisci bene che scrivere la reg exp come hai suggerito diventa una cosa lunghissima...
    «Non esiste mondo fuor dalle mura di Verona; ma solo purgatorio, tortura, inferno. Chi è bandito di qui, è bandito dal mondo e l'esilio dal mondo è morte...»
    - William Shakespeare -

  6. #6
    Se la riga è a struttura fissa, perchè vuoi usare le espressioni regolari oppure, semplicemente, perchè non usi la dimensione del campo come discriminante, al posto del tipo?

    Codice PHP:
    $pattern '#^([ \\d]{5})([ \\d]{5})([ \\d]{3}) etc. etc.#'

  7. #7
    come ti ho già detto, non sono io a decidere, a me han chiesto solo la regExp, poi chi di dovere si arrangia a fare quello che deve fare.
    Comunque la regexp ultima l'avevo già scritta anch'io ma accetta anche le combinazioni di spazi e numeri per i primi 5 caratteri (es _3_45).
    Ho comunque risolto...grazie lo stesso...
    «Non esiste mondo fuor dalle mura di Verona; ma solo purgatorio, tortura, inferno. Chi è bandito di qui, è bandito dal mondo e l'esilio dal mondo è morte...»
    - William Shakespeare -

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 © 2025 vBulletin Solutions, Inc. All rights reserved.