Visualizzazione risultati 1 fino 5 di 5

Discussione: Preg match via e parentesi

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito Preg match via e parentesi

    Buonasera.
    Ho delle stringhe estratte tramite una classe PHP da dei PDF ed ho bisogno di prendermi del testo che si trova tra due righe.

    Le righe sono:

    "Spett.le
    Testo da prelevare (nome / cognome)
    Via XX"

    Il problema è che non si tratta sempre di una via ma anche di vicolo, piazze, ecc e fin qui nessun problema utilizzando la seguente espressione:

    Codice PHP:
    #Spett.le(.*)(Via|VIA|Salita|Vico|Viiale|Viale|Via S.|Primo)(.*)#s
    Il problema si presenta quando qualche PDF ha all'interno questa dicitura: Via (C.I.) al posto di Via. Manda in crash tutto lo script.

    Come posso modificare la mia regex?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Buongiorno non ho ben compreso a quale stringa ti riferisco.. Ad esempio "Spett.le
    Testo da prelevare (nome / cognome)
    Via (C.I.)" recupera anche le parentesi.. Cmq. Devi aggiungere due backslash "Via S\\." perché il punto in una sotto regola (le parentisi tonde) ha un significato diverso.
    Ultima modifica di darbula : 26-06-2017 alle ore 10.05.02

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Si c'è nel post o meglio non so perchè quando posto si cancella... però io devo prendere il nome e cognome invece viene preso anche la stringa "Via (C.I.) bla bla" ed altro testo (ove presente).
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Con la funzione preg_match verrà creato un array dove il primo elemento è l'intero criterio di ricerca, successivamente le sotto regole iniziando da sinistra a destra..
    Il tuo pattern già funziona ma comunque ho raggruppato il tutto per l'iniziale "Vi" e non rendo visibile questa cattura "?:"..
    Codice PHP:
    <?php
    $pattern
    = '#Spett.le(.+)(?:Vi(?:a S\\.|ale|a|iale|co)|Salita|Primo|VIA)(?:.+)#s';
    $subject = 'Spett.le
    Testo da prelevare (nome / cognome)
    Via (C.I.)'
    ;
    preg_match($pattern, $subject, $matches);
    print_r($matches);
    //print_r($matches[1]);
    ?>
    Va ripulito dagli spazi bianchi il risultato ottenuto.

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Se si ha un partenza fissa "Spett.le
    " si inizia la ricerca dalla prima occerenza di accapo e la si termina alla prima occorrenza di accapo..
    Cioè cosi
    Codice PHP:
    $pattern = "#Spett.le[\r\n]([^\r\n]+)#s"

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •