Visualizzazione risultati 1 fino 6 di 6

Discussione: Sostituire una porzione di stringa

  1. #1
    Guest

    Predefinito Sostituire una porzione di stringa

    Devo sostituire una porzione di stringa che è compresa tra 2 stringhe, con un'altra stringa.
    Il valore delle stringhe è sempre diverso...

    Esempio:
    $str = "Ciao a tutti il mio nome è Alessio e sono registrato da parecchi anni.";

    Vorrei prendere tutto ciò che è compreso tra "il mio nome" e "da parecchi" sostituirlo con questo "TestoSostituito" e aggiornare la variabile $str con la nuova stringa.

    Stampando la variabile dovrei quindi avere
    echo $str;
    "Ciao a tutti TestoSostituito anni."

    So che si dovrebbe poter fare con preg_replace ma proprio non capisco come, le espressioni regolari non mi entrano in testa.
    Qualcuno può aiutarmi?
    Ultima modifica di Johell : 07-01-2016 alle ore 17.02.23

  2. #2
    Guest

    Predefinito

    Così?

    Codice PHP:

    error_reporting
    (E_ALL);

    $testo="Ciao a tutti il mio nome è Alessio e sono registrato da parecchi anni.";
    preg_match_all("(il(.*?)anni)", $testo , $risultato);

    //var_dump($risultato);

    $ris = str_replace($risultato[1][0],' testo sostitutivo ', $testo);
    print
    $ris;
    Ps:Le espressioni regolari le odio, infatti chiedo sempre aituo anche io :)
    Ultima modifica di fractalcosmo : 07-01-2016 alle ore 21.47.01

  3. #3
    trb
    trb non è connesso Neofita
    Data registrazione
    18-06-2015
    Messaggi
    9

    Predefinito

    Scusate , ma non è piu' semplice fare così?
    Codice PHP:
    $str = "Ciao a tutti ";
    $miastringa = "Tuo testo variabile";
    if(empty(
    $miastringa)){
    $str = $str . " il mio nome è Alessio e sono registrato da parecchi ";
    } else {
    $str = $str . $miastringa;
    }
    $str = $str . " anni.";

  4. #4
    Guest

    Predefinito

    Io non avevo capito se il problema era sostituire quella determinata stringa oppure se lui necessita di sostituire un determinato range presente in diverse stringhe potrebbe avere il mio nome è alesso il nome è pippo etc...
    Perchè se deve solo sostituire quella determinata stringa e basta, basta usare str_replace se invece sono tante stringhe con nomi diversi gli serve un range da a.
    Come hai fatto tu è anche un pò contorto ma il risultato è uguale, ;) L'importante è quello....Ciao

  5. #5
    Guest

    Predefinito

    Esatto il contenuto è sempre diverso..
    Comunque ho risolto localizzando le 2 posizioni con strpos, e successivamente modificato la stringa con substr

  6. #6
    Guest

    Predefinito

    Esatto anche così va bene, il mio esempio con preg_match_all fa lo stesso cioè prende tutto quello delimitato tra "il" e "anni" lo inserisce dentro un array e dopo fa lo str_replace della chiave dell'array da "il" a "anni" con testo modificato, facendo il var_dump di $risultato(che è il risultato che crea preg_math_all) puoi vedere sia se usare il e anni compresi o non compresi, cioè se fai

    $ris = str_replace($risultato[0][0],' testo sostitutivo ', $testo);

    printerà "ciao a tutti testo sostitutivo", cioè comprende anche il e anni.

    ma non ho ben capito come usi iul substr, se puoi mettere il codice vedo la tua soluzione....Comunque l'importante è risolvere.Ciao

    Ps: il ? dentro preg_match_all è superfluo puoi scrivere preg_match_all("(il(.*)anni)", $testo , $risultato);
    Ultima modifica di fractalcosmo : 09-01-2016 alle ore 14.11.11

Regole di scrittura

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