Pagina 1 di 1

Ricavare variabili da una stringa

Inviato: 29/09/2010, 18:19
da BMercer
Salve a tutti. Avrei bisogno dell'ennesimo aiuto. Ho cercato per google ma sinceramente non saprei cosa cercare.
Mettiamo il caso che ci sia una campo di testo che un utente può compilare. Il testo inviato dall'utente deve essere elaborato nella seguente immaginaria pagina php:

Prende la stringa e la confrontiamo con alcune stringhe che abbiamo in un array. Nel caso combacino parzialmente otteniamo come differenza alcune variabili. Capisco che è difficile detto così quindi farò degli esempi:

Mettiamo che un utente invii una stringa del tipo:
mangia 3 mele
Siccome che da qualche parte questa stringa è parzialmente simile:
mangia $i mele
voglio ricavare $i.
Però voglio anche poter inviare un messaggio di errore nel caso quel parziale non combaciasse esattamente, per esempio:
mangia 3 meleojioi
voglio che porti ad un errore, visto che meleojioi non è uguale a mele.
Non so se mi sono spiegato.
Forse è risolvibile con quella specie di selettori di cui non trovo mai una spegazione.
Ho infatti visto tipo dei codici che dicono:

Codice: Seleziona tutto

     $search = array(
         '/\[b\](.*?)\[\/b\]/is',                                
         '/\[i\](.*?)\[\/i\]/is',                                
         '/\[u\](.*?)\[\/u\]/is',
         '/\[img\](.*?)\[\/img\]/is',
         '/\[url\](.*?)\[\/url\]/is',
         '/\[url\=(.*?)\](.*?)\[\/url\]/is'
         );
     $replace = array(
         '<strong>$1</strong>',
         '<em>$1</em>',
         '<u>$1</u>',
         '<img src="$1" />',
         '<a href="$1">$1</a>',
         '<a href="$1">$2</a>'
         );
     $var = preg_replace ($search, $replace, $var);
     return $var;
 
però io non so cosa voglia dire (.*?) e perchè quel (.*?) si trasformi in $1.
Qualcuno può spiegarmelo?

Re: Ricavare variabili da una stringa

Inviato: 29/09/2010, 18:29
da Micogian
Sono le REGEXP, espressioni regolari, cerca su google

Re: Ricavare variabili da una stringa

Inviato: 29/09/2010, 18:40
da Carlo
Quel (.*?) indica il tipo di valore che dovrebbe trovarsi lì.
Invece $1 si usa nel secondo parametro di preg_replace(), e serve a fare in modo che il primo valore trovato, venga sostiuto con $1. Ti faccio un'esempio dei prim due parametri.


Ci sono 3 mele e 2 pere. ($search)

Codice: Seleziona tutto

/Ci sono (.*?) mele e (.*?) pere./is

Ecco due esempi che può avere il valore $replace:

Le mele e le pere sono rispettivamente 3 e 2.

Codice: Seleziona tutto

Le mele e pere sono rispettivamente $1 e $2.
Le pere e le mele sono rispettivamente 2 e 3.

Codice: Seleziona tutto

Le pere e le mele sono rispettivamente $2 e $1.

Nella variabile $search, quei due / contengono l'espressione regolare, mentre la parola is dopo lo slash finale, indicano che la stringa è case-insensitive, quindi la frase può essere sia:

Codice: Seleziona tutto

Ci sono 3 mele e 2 pere.
e sia:

Codice: Seleziona tutto

ci sono 3 MELE e 2 PERE.