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

    preg_replace e corrente numero sostituzioni

    scusate il titolo, per non essere vago non si capisce nulla

    allora, avrei bisogno di un'idea:

    vorrei sostituire un link (una regexp a regola) in un testo, presente pių volte (e con spazi), con il numero corrente di sostituzioni effettuate, durante il passaggio diciamo...

    praticamente vorrei trasformare questo:

    con questo:

    testo vario 0 testo 1 2 3
    ho provato a ciclare preg_match e con il parametro 'count' di preg_replace ma non ho ottenuto grandi risultati...
    magari mi sto perdendo in un bicchier d'acqua
    grazie... ancora

  2. #2
    Codice PHP:
    $GLOBALS['cont'] = 0;
    $testo preg_replace_callback("/tuo_pattern/"create_function (''"return \$GLOBALS['cont']++;"), $testo);
    unset(
    $GLOBALS['cont']); 
    Se non vuoi correre rischi sull'esistenza della variabile globale facci un controllo/backup prima di inizializzarla.

  3. #3
    puoi anche fare cosė (il concetto č praticamente identico, ma si risparmia il create_function):

    Codice PHP:
    $i 0;
    $testo preg_replace('/pattern/e','$i++',$testo)  ; 
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    intanto grazie...
    in nottata ho trovato una mia soluzione, un po' arzigogolata ma funzionante...

    @skidx: non sono praticissimo di callback e affini... potresti farmi un mini-esempio?

    @AnĒkin: non mi aumenta il contatore ad ogni sostituzione...
    grazie... ancora

  5. #5
    Come hai modificato il tuo script? Hai lasciato la "e" come modificatore di criterio nella tua regex? Devi anche usare le virgolette singole
    codice:
    $i = 0;
    $testo = preg_replace('/pattern/e ','$i++' ,$testo)  ;
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  6. #6
    codice:
    $count=0;
    $text[$ii]=preg_replace('/\[a\](.+)\[\/a\]/e','<a name="$ii$count++">$1</a>',$text[$ii]);
    cosė si lamenta: syntax error, unexpected '<'.
    ho provato anche a sostituirlo con gt; o &gt;

    grazie č!
    grazie... ancora

  7. #7
    La e sta per eval quindi devi passare una stringa come fosse una riga di codice che stampi a video, facendo attenzione agli apici (quelli che usi nella preg devono essere singoli quindi nel tuo caso devi usare solo i doppi e usare l'escape:

    Codice PHP:
    echo  "<a name=\"".$ii.($count++)."\">$1</a>"
    Con il codice precedente costruisci una stringa corretta, ora la prendi pari pari e la sbatti nel replacement della preg_replace:

    Codice PHP:
    $count=0;
    $text[$ii]=preg_replace('/\\[a\\](.+)\\[\\/a\\]/e','"<a name=\"".$ii.($count++)."\">$1</a>"',$text[$ii]); 
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  8. #8
    ottimo...
    ho ridotto 12 righe di codice a 2

    grazie mille!
    grazie... ancora

  9. #9
    scusa... un'ultima curiositā:

    se io volessi che il testo risultante dopo tutte le sostituzioni sia composto solo dalle sostituzioni stesse?
    c'č un "modifier" apposta o qualche altro trick?
    grazie... ancora

  10. #10
    Non ho mica capito. Se, forse, vuoi un array che contenga tutto ciō che č stato sostituito puoi fare una cosa del genere:

    codice:
    $count=0;
    $sost = array();
    $text[$ii]=preg_replace('/\[a\](.+)\[\/a\]/e','"<a name=\"".$ii.$count."\">".($sost[$count++]="$1")."</a>"',$text[$ii]);
    echo '<pre>';
    print_r($sost);
    oppure ciō con cui hai sostituito:
    codice:
    $count=0;
    $sost = array();
    $text[$ii]=preg_replace('/\[a\](.+)\[\/a\]/e','"<a name=\"".($sost[$count]=$ii.$count++)."\">$1</a>"',$text[$ii]);
    echo '<pre>';
    print_r($sost);
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

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.