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

    [php] preg_replace regexpr

    Salve ragazzi..

    Io ho questa funzione:
    Codice PHP:
        function sost_semplice($stringa) {
            
    $valori = array('[b]'=>'[b]''[p]'=>'

    '
    '[li]'=>'[*]''[h1]'=>'<h1>''[h2]'=>'<h2>''[h3]'=>'<h3>''[h4]'=>'<h4>''[strong]'=>'[b]',
                    
    '[/b]'=>'[/b]''[/p]'=>'</p>''[/li]'=>'''[/h1]'=>'</h1>''[/h2]'=>'</h2>''[/h3]'=>'</h3>''[/h4]'=>'</h4>',
                    
    '[/strong]'=>'[/b]''[br]'=>'
    '
    '[nl]'=>'\n');
            foreach (
    $valori AS $k=>$v) {
                
    $stringa preg_replace("$k""$v"$stringa);
            }
            return 
    $stringa;
        } 
    attenzione che mi mangi dei caratteri il forum.. cmq non è indispensabile si comprende lo stesso...

    Pensavo che facendo:
    $stringa = preg_replace("$k", "$v", $stringa);

    mi sostituisse normalmente le chiavi con i valori.. ma non è cosi.. credo il problema sia nel:
    $stringa = preg_replace("$k", "$v", $stringa);

    ma non sò come risolvere qualcuno ha qualche idea???
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    Hai provato a dare un'occhiata al manuale ?

    Sembrerebbe di no, perchè la sintassi che usi nella preg_replace() è errata e dovrebbe anche darti un errore.

    Fra l'altro, una volta sistemata la sintassi, puoi evitare di scorrere il ciclo e dare in pasto alla funzione direttamente l'array (anche questo è puntualmente riportato nel manuale)
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  3. #3
    woow a dire il vero ho guardato il manuale..

    E ho visto anche che posso dare "in pasto" l'array.. Il problema è che io non ho un'array x i termini da ricercare e uno x i termini da rimpiazzare..

    Non capisco xke sbaglio il foreach..

    Riguardo il manuale cmq.. si sa mai..
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Ho riscritto la funzione xò va peggio di prima..

    Codice PHP:
        function sost_semplice($stringa) {
            
    $cercati = array('[b]''[p]''[li]''[h1]''[h2]''[h3]''[h4]''[strong]''[/b]''[/p]''[/li]''[/h1]''[/h2]''[/h3]''[/h4]',    '[/strong]''[br]');
            
    $sostituti = array('[b]''

    '
    '[*]''<h1>''<h2>''<h3>''<h4>''[b]''[/b]''</p>''''<h1>''<h2>''<h3>''<h4>''[/b]''
    '
    );
            
    $stringa preg_replace("$cercati""$sostituti"$stringa);
            return 
    $stringa;
        } 
    Se qualcuno è gentile da spiegare il xkè..
    Questa volta, più che un voto.. è favoreggiamento.

  5. #5
    Le espressioni regolari devono essere racchiuse tra delimitatori, ad esempio /. Ogni carattere che non sia alfanumerico od il backslash (\) può essere usato come delimitatore. Se il carattere usato come delimitatore deve essere utilizzato all'interno dell'espressione, questo deve essere preceduto dal carattere di escape (\).
    http://it.php.net/manual/it/ref.pcre.php
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  6. #6
    Anche cosi non va..

    Codice PHP:
        function sost_semplice($stringa) {
            
    $cercati = array('[b]''[p]''[li]''[h1]''[h2]''[h3]''[h4]''[strong]''[/b]''[/p]''[/li]''[/h1]''[/h2]''[/h3]''[/h4]''[/strong]''[br]');
            
    $sostituti = array('[b]''

    '
    '[*]''<h1>''<h2>''<h3>''<h4>''[b]''[/b]''</p>''''<h1>''<h2>''<h3>''<h4>''[/b]''
    '
    );
            
    $stringa preg_replace("/$cercati/""$sostituti"$stringa);
            return 
    $stringa;
        } 
    mi ritorna la stringa senza effettuare il replace.. Stessa cosa se metto cosi:

    $stringa = preg_replace("/$cercati/", "/$sostituti/", $stringa);
    Questa volta, più che un voto.. è favoreggiamento.

  7. #7
    I delimitatori devono "circondare" la stringa, per cui nel tuo caso il carattere / deve stare prima e dopo OGNI elemento del primo array
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  8. #8
    :master:
    Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /web/htdocs/www.***.it/home/contenuti.php on line 14

    Codice PHP:
            function sost_semplice($stringa) {
            
    $cercati = array('/[b]/''/[p]/''/[li]/''/[h1]/''/[h2]/''/[h3]/''/[h4]/''/[strong]/''/[/b]/''/[/p]/''/[/li]/''/[/h1]/''/[/h2]/''/[/h3]/''/[/h4]/''/[/strong]/''/[br]/');
            
    $sostituti = array('[b]''

    '
    '[*]''<h1>''<h2>''<h3>''<h4>''[b]''[/b]''</p>''''<h1>''<h2>''<h3>''<h4>''[/b]''
    '
    );
            
    $stringa preg_replace("$cercati""$sostituti"$stringa);
            return 
    $stringa;
        } 
    la linea 14 è:

    $stringa = preg_replace("$cercati", "$sostituti", $stringa);

    backslash??? non mi pare ke ci siano... può essere che fà casino tipo con '/[/h1]/' ma ho provato a fare l'escape con \ ma lo stesso mi resta l'errore :master:
    Questa volta, più che un voto.. è favoreggiamento.

  9. #9
    Devi togliere i doppi apici da preg_replace("$cercati", "$sostituti", $stringa); ma soprattutto devi fare l'escape dei caratteri speciali, ad esempio, nel tuo caso, le parentesi quadre che hanno un significato speciale in un'espressione regolare.

    Ovviamente tutte cose riportate nel manuale

    http://it.php.net/manual/it/referenc...ern.syntax.php
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  10. #10
    ma l'escape lo devo fare solo al primo array??

    adesso mi dà:
    Warning: preg_replace() [function.preg-replace]: Unknown modifier 'b' in /web/htdocs/www.***.it/home/contenuti.php on line 14

    Warning: preg_replace() [function.preg-replace]: Unknown modifier 'p' in /web/htdocs/www.***.it/home/contenuti.php on line 14

    e ho fatto l'escape cosi:
    $cercati = array("/\[b\]/", "/\[p\]/", "/\[li\]/", "/\[h1\]/", "/\[h2\]/", "/\[h3\]/", "/\[h4\]/", "/\[strong\]/", "/\[/b\]/", "/\[/p\]/", "/\[\/li\]/", "/\[\/h1\]/", "/\[\/h2\]/", "/\[\/h3\]/", "/\[\/h4\]/", "/\[\/strong\]/", "/\[br\]/");

    però non ho trovato niente sull'escape di p e b... e non mi pare sono caratteri speciali.. :master:
    Questa volta, più che un voto.. è favoreggiamento.

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.