Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    da eregi_replace a preg_replace

    Salve, ho l'esigenza di sostituire in alcuni template delle parti di codice con preg_replace, prima tale operazione era effettuata con eregi_replcace:

    l'obbiettivo è di togliere o sostituire solo quello presente tra due commenti, lasciando la formattazione inalterata....


    esempio:

    $string = eregi_replace("(.+)", '', $string);

    adesso io dovrei fare lo stesso con preg_replace, aggiunti gli estremi / /i rispettivamente la
    cosa funziona egraggiamente se viene posto tutto sulla stessa riga, va bene il problema sono i ritorni di riga, allora ho trovato una prima soluzione:


    function eregi_replace_wrapper($pattern, $replacement, $string) {

    $clean_string = preg_replace("/\n|\r/"," ",$string);

    $wrap_pattern = "/".$pattern."/i";

    $result = preg_replace($wrap_pattern, $replacement, $clean_string);

    return $result;
    }

    il problema è che togliendo i ritorni di riga, ottengo quello che voglio ma il risultato è di mettere tutto su una riga.....

    Non è indispensabile per il mio uso il case-insensitive in effetti tutti i commenti sono maiuscoli

    ho provato ad usare il modificatore /s il (.*) ecc... ma non sono tanto esperto con le espressioni regolari....

    ringrazio tutti per l'attenzione ed ogni eventuale consiglio

    grazie

  2. #2
    puoi anche catturaere tutto quello che c'è all'interno dei tag in questo modo:

    "([^<]+)"

    in questo modo prendi qualsiasi carattere che sia diverso ^ da < (anche gli a capo)
    OUTSHINE '84

  3. #3
    Il modificatore /s dovrebbe proprio essere quello che ti serve, se non funziona posta un esempio del testo originale e spiega bene che parte devi estrarre.

  4. #4
    si tratta di semplici pagine html in cui alcuni blocchi vegono sostituiti in maniera dinamica...


    <body>
    <div id="wrap">

    <div id="header">

    <h4> rilevato errore </h4>

    </div>
    </div>
    </body>


    adesso se non ci sono degli errori dovrebbe per cosi dire tagliare quello che c'è dentro tra


    restituendomi ad esempio:

    <body>
    <div id="wrap">

    <div id="header">
    </div>
    </div>
    </body>

    con
    $var = eregi_replace('(.+)', '' $var);

    ottenevo questo risultato, dovrei ottenere lo stesso risultato, compreso il mantenimento della
    tabulazione sostituendo ad esempio
    con la funzione

    $var = eregi_replace_wrapper('(.+)', '' $var);

    in questa funzione uso preg_replace.

    in parte ci sono riuscito, il testo è quello che voglio ma mi mette tutto su una riga, come ho postato nella funzione precedente, in quanto elimino i ritorni di riga, metto prima di effettuare la sostituzione tutto su una riga, perchè il preg_replace per via predefinita esamina solo la riga corrente....

    a me servirebbe un modo per dirgli di continuare la ricerca e la sostituzione oltre la riga corrente...

    grazie ancora per la disponibilità

  5. #5
    Il modo e' esattamente usare il modificatore /s:

    codice:
    $var = echo preg_replace('#.*?\n?#s', '', $var);
    ma come fai a distinguere l'inizio di un blocco di errore dalla fine? I delimitatori sono uguali.

  6. #6
    in realtà a me non interessa dove inzia o dove finisce...., l'importante è che se c'è un errore il codice rimanga con i commenti, se non c'è un errore, tutto quello tra i commenti sparisce, ovviamente nella pagina ci sono solo 2 , se ce ne fossero di più come dici te, dovrei sapere dove inizia e finisce il blocco....
    adesso appena ho un attimo la provo... ma come mai usi gli # come delimitatori invece dei / , se scrivo

    $var = preg_replace('/.*?\n?/s', '', $var);

    il funzionamento mi rimane invariato?

    GRAZIE ANCORA....

  7. #7
    Uso # come delimitatore perche' spesso capita di avere degli slash nel pattern di ricerca e cosi' evito di doverli quotare. Puoi usare il carattere che preferisci.

  8. #8
    io invece sono proprio incasinato con i caratteri di ricerca, avendo alla fine questa funzione:

    Codice PHP:
    function eregi_replace_wrapper($pattern$replacement$string) {
            if(!
    strstr($pattern,'(.+)')) {
                
    //se è una semplice sostituzione usa str_replace
                
    $result str_replace($pattern$replacement$string);
            }else {
                
    $arr_regex explode('(.+)'$pattern);
                
    $wrap_pattern '/'.$arr_regex[0].'.*?'.$arr_regex[0].'\n?/s';
                
    $result preg_replace($wrap_pattern$replacement$string);
            }
            return 
    $result;    

    non mi funziona, i fatto è che probabilmente nella pagina ho ogni sorta di carattere, essendo html stracommentato, javascript e chi più ne ha più ne metta , ho persino degli % tra i commenti...
    comunque continuo con le prove.... grazie

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.