Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    Sostituire l'ultima data di una stringa

    Ciao, oggi mi ritrovo con questo problema.
    Sto provando con una frase di questo genere:
    Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882
    Con la frase così costruita riesco a sostituire o la prima o l'ultima occorrenza della data in questo modo:
    Codice PHP:
    $stringa "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882";
    //$pattern = '/[0-9]{4}$/';
    $pattern '/[0-9]{4}/';
    $replacement '1807';
    $stringa_modificata preg_replace($pattern$replacement$stringa1$count);
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<br />\n";
    echo 
    "Effettuate " $count " sostituzioni<br />\n"
    Ovviamente col pattern commentato sostituisco l'ultima occorrenza, mentre col pattern attivo sostituisco la prima.
    Il problema della sostituzione dell'ultima occorrenza nasce se cambio la frase in
    Codice PHP:
    $stringa "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, il 2 giugno 1882 è morto a Caprera"
    Ho trovato una discussione simile ed ho cercato di adattarla al mio scopo, Purtroppo non ci riesco.
    Ho cercato di modificare il pattern in questa maniera
    Codice PHP:
    $pattern '#[0-9]{4}(.*?)$#si'
    ma non riesco a farla funzionare.
    C'è un modo di farla funzionare con questa seconda frase?

    Grazie per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    313
    La stringa la prelevi da DB o è già in questo formato ?

  3. #3
    Ciao sjpagan,
    quella è una normale stringa scritta a mano e memorizzata in una variabile

    Grazie

  4. #4
    Ah, dimenticavo.
    Questo è un piccolo studio che sto facendo sulla funzione preg_replace().
    Quindi la stringa, per ora è scritta a manina, ma potrebbe essere una stringa prelevata da varie fonti tipo una Form o un DB.
    In ogni caso, questa è la stringa su cui dovrei lavorare:
    Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, il 2 giugno 1882 è morto a Caprera.

    Per la prima stringa (Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882) non ho avuto problemi per sostituire sia la prima che l'ultima occorrenza dell'anno.



  5. #5
    Il limite di preg_replace, in questo senso, è che può fare N sostituzioni a partire dall'inizio, ma non a partire dalla fine. Il seguente script fa quello che chiedi, usando preg_match_all combinato con str_replace per trovare tutte le occorrenze e poi sostituire solo l'ultima (ha più senso usare str_replace invece di preg_replace perché ho già ottenuto la stringa esatta da sostituire).
    Codice PHP:
    $stringa "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882";
    //$pattern = '/[0-9]{4}$/';
    $pattern '/[0-9]{4}/';
    $replacement '1807';
    if(
    $count preg_match_all($pattern$stringa$matchesPREG_OFFSET_CAPTURE)){
        list(
    $found$offset) = $matches[0][count($matches[0])-1];
        
    $stringa_modificata substr($stringa0$offset) . str_replace($found$replacementsubstr($stringa$offset));
    }
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<br />\n";
    echo 
    "Effettuate " $count " sostituzioni<br />\n"

  6. #6
    Perfetto ZioLuffio,
    La tua dritta funziona:
    Codice PHP:
    $stringa "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, il 2 giugno 1882 è morto a Caprera";
    //$pattern = '/[0-9]{4}$/';
    $pattern '/[0-9]{4}/';
    $replacement '1807';
    if(
    $count preg_match_all($pattern$stringa$matchesPREG_OFFSET_CAPTURE)){
        list(
    $found$offset) = $matches[0][count($matches[0])-1];
        
    $stringa_modificata substr($stringa0$offset) . str_replace($found$replacementsubstr($stringa$offset));
    }
    echo 
    "La stringa da modificare<br />\n";
    echo 
    $stringa "<br />\n";
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<br />\n";
    echo 
    "Effettuate " $count " sostituzioni<br />\n"
    Mi restituisce quel che volevo:
    La stringa da modificare
    Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, il 2 giugno 1882 è morto a Caprera
    La stringa modificata
    Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, il 2 giugno 1807 è morto a Caprera
    Effettuate 2 sostituzioni
    Che preg_replace può fare le sostituzioni a partire dall'inizio, ma non a partire dalla fine è un peccato. Comunque con la combinazione da te suggerita si rimedia a questo limite.

    Ti ringrazio e alla prossima
    Ultima modifica di micdas; 10-10-2014 a 17:11

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    Oppure cosi...

    Codice PHP:
    <?php
    $stringa 
    "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882 alle 15.45";
    $pattern '/[0-9]{4}/';
    $replacement '1807';
    $stringa_modificata strrev(preg_replace($patternstrrev($replacement), strrev($stringa), 1$count));
    echo 
    "La stringa prima<br/>";
    echo 
    $stringa."<br/>";
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<br />\n";
    echo 
    "Effettuate " $count " sostituzioni<br />\n";
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Oppure cosi...

    Codice PHP:
    <?php
    $stringa 
    "Giuseppe Garibaldi è nato a Nizza il 4 luglio 1821, morto a Caprera il 2 giugno 1882 alle 15.45";
    $pattern '/[0-9]{4}/';
    $replacement '1807';
    $stringa_modificata strrev(preg_replace($patternstrrev($replacement), strrev($stringa), 1$count));
    echo 
    "La stringa prima<br/>";
    echo 
    $stringa."<br/>";
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<br />\n";
    echo 
    "Effettuate " $count " sostituzioni<br />\n";
    Tu sei fissato, con questo metodo! Ti ho già visto usarlo in un altro topic. Non sono tanto d'accordo: qui va di lusso che è molto semplice, ma con pattern più complicati hai voglia a girare tutto! (e di certo non basta strrev )

    Non credo sia giusto complicare le idee al ragazzo

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    strrev('ùseG') ha detto che gli ultimi saranno i primi.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Quote Originariamente inviata da badaze Visualizza il messaggio
    strrev('ùseG') ha detto che gli ultimi saranno i primi.
    Ahahah

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.