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

    aiuto con ereg ed ereg_replace

    Salve a tutto lo staff ed agli utenti.
    Arrivo subito al dunque.
    Ho queste 2 funzioni :

    1 - ereg("<\[foreach\]>(.+)<\[\/foreach\]>",$string,$matches)
    2- ereg_replace("<\[foreach\]>.+<\[\/foreach\]>","<[foreach$i]>",$value);

    Adesso, queste funzioni vanno bene fino alla ultima release di php 5.2.x.
    Dalla versione 5.3 di php queste 2 funzioni sono deprecate e sono state sostituite ripettivamente da :

    1- ereg(......,.....,....) =>preg_match(....,...,....);
    2- ereg_replace(...,...,...) => preg_replace(...,....,....);

    Ho provato ad eseguire la sostituzione della prima funzione(ereg() to preg_match()), ma non ottengo il risultato, ossia se faccio il print_r($matches) di preg_match, l'array è vuoto, mentre quello di ereg è corretto.
    Credo che il problema sia quel " (.+) " che non riesco a gestire con preg_match.
    Questo (.+) non significa "almeno un qualsiasi carattere tra <[foreach]> e <[/foreach]>" ?
    Qualcuno mi può dare gentilmente una mano a capire dove sta il problema o se si puo sostituire la regexp in modo tale da ottenere lo stesso risultato?

    Ci ho perso un po di ore, senza risultato, quindi al momento, mi rimetto con la versione php 5.2.11, nella speranza di poter risolvere al piu presto.
    Grazie a tutti per la disponibilità.
    A presto
    E.

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    codice:
    preg_match("#<foreach>(.+)<\/foreach>#", $string, $matches);
    eXvision

  3. #3
    Ciao, grazie della risposta, ma non funziona, l'array $matches di preg_match, risulta vuoto.
    Che si può fare?
    Può dipendere dal "(.+)" tra i 2 foreach?
    Dico questo perche ho provato ad inserire nel preg_match solamente il tag "<\[foreach\]>" e stampo a video con print_r($matches), mi restituisce i match trovati.
    Scusami se ti disturbo, ma potresti spiegarmi il perche del "#" all'interno della regexp ?
    Grazie ancora per l'aiuto.
    Sembrava banale il problema ma evidentemente non lo è........uff.
    A presto
    E.

  4. #4
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Codice PHP:
    <?php
    $show 
    "<foreach>ciao a tutti</foreach>";
    preg_match("#<foreach>(.+)<\/foreach>#"$show$vedi);
    print_r($vedi);//Array ( [0] => ciao a tutti  [1] => ciao a tutti ) 
    ?>

    ma hai utilizzato quello che ho scritto io oppure l'hai modificato con le parentesi quadre?
    per l'# "all'interno" della regex ti rispondo auto-quotandomi in un post di un paio di settimane fa..
    c'è un bellissimo sito, pieno di esempi e descrizioni di ogni singola funzione, si chiama php.net, in cui puoi trovare tutte le informazioni di cui hai bisogno...
    preg_replace()
    ereg_replace()

    puoi notare che 'ereg' (deprecate) usano le espressioni tipo POSIX, mentre le 'preg' usano le Perl-Compatible Regular Expressions (PCRE)

    codice:
     ereg_replace ( string $pattern , string $replacement , string $string )
    codice:
     preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
    per quanto possano sembrare simili le due funzioni, la differenza sostanziale è appunto, il pattern della stessa espressione regolare (presenza dei delimitatori, modificatori, ecc).. per maggiori info cliccami
    eXvision

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.