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

    preg_replace non funziona

    Scusate ragazzi
    ho la seguente espressione regolare:
    codice:
    preg_replace("/@([\w]+)/",swap_smile("\\1"),$test);
    dove la variabile $test vale "fammi ridere @risata"

    pesta espressione mi dà come risultato il valore \1 e non capisco come mai.

    se sostituisco il secondo parametro con "\\1", mi funziona, xchè mi ritorna esattamente il valore cercato.

    swap_smile è una funzione ceh verifica se il parametro passato è incluso in array, se si, la funzione mi restituisce <img src .....> altrimenti mi restituisce una stringa vuota.

    mi dite come mai non và ?
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  2. #2
    se vuoi usare una funzione per il pattern di sostituzione, devi usare
    preg_replace_callback()

    preg_replace() accetta solo una stringa come secondo parametro, non una funzione.

  3. #3
    ho provato ma c'è ancora qualcosa che non va.. i mostro del codice;

    questo è il codice dove chiamo la funzione preg_replace_callback
    codice:
    $test="fammi ridere @risata";
    $result=preg_replace_callback("/@([\w]+)/","swap_smile",$test);
    print $result;
    Ho provato sia così che con "swap_smile('\\1')" ma non và.

    Mentre swap_smile ha il seguente codice:
    codice:
    function swap_smile ($str="") {
    	$smiles=array(
    		"affamato","aladino","amici","angelo","angelodiavolo","arrabbiato","assetato",
    		"baci","baciocuore","barba","bevo","bleah","bravo","calcio","carezza","chips",
    		"cioccolatini","cornuto","cuore","cupido","demolition","diavolo","dorme","dottore",
    		"elefantino","evviva","felice2","felice","fiori","fischio","foto","freddo","fuma","furioso",
    		"gattini","iloveyou","infermiera","innamorato","karate","ladylazo","lavadenti","lavarsi",
    		"lenti","linguaccia","love","lupomannaro","malato","mammamia","mazzata","miarrendo",
    		"musica","neve","nonciprovare","noo","occhiolino","pattinare","pesce","piango","pollicegiu",
    		"porco","preoccupato","pugno","puzzetta","raggi","regalo","risata","risatapazza","rosablu",
    		"rosarossa","saluto","salute","sbadiglio","sciare","scimmietta","serenata","serpente","slittino",
    		"soldato","soldato2","sorrisetto","sospetto","spassoso","spaventato","sposi","sputo","stop",
    		"telefono","topolino","triste","ubriaco","uccellino","uff","uffa"
    	);
    	print_r($str);
    	
    	if ($exist=array_search($str,$smiles)) {
    		$img="<img src=\"/imgs/smile/risata.gif\" width=\"10\" height=\"10\" alt=\"\" />\n";
    		return $img;
    	} else return "";
    }
    Come vedi prendo la stringa restituita dall'espressione e la confronto con una lista prima di inserire una immagine.
    Scusami se ti sembro un neofita, ma non ho mai avuto possibilità di utilizzare le espressioni regolari, quindi mo trovo un pò spiazzato.

    Qualche idea ?

    p.s.
    Comunque grazie per l'aiuto
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  4. #4
    preg_replace_callback passa alla funzione che tu specifichi (swap_smile) un array con i valori trovati dall'espressione regolare.

    La tua funzione al momento si aspetta una stringa, devi modificarla affinché lavori sull'array che gli viene passato.

    Ti consiglio di fare un print_r() dell'array passato dentro la funzione, in modo da capirne la struttura, per poi lavorarci con la tua funzione.

  5. #5
    ti ringrazio molto per l'aiuto
    adesso funziona tutto

    ciao
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

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 © 2024 vBulletin Solutions, Inc. All rights reserved.