phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Ricavare variabili da una stringa

Area di discussione relativa al linguaggio di programmazione web più conosciuto. Il forum è dedicato anche a MySQL, la piattaforma di database più utilizzata con il PHP.
Rispondi
BMercer
Utente
Utente
Messaggi: 205
Iscritto il: 02/09/2009, 12:28
Versione: 3.0.6
Server: UNIX/Linux

Ricavare variabili da una stringa

Messaggio da BMercer » 29/09/2010, 18:19

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?

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Ricavare variabili da una stringa

Messaggio da Micogian » 29/09/2010, 18:29

Sono le REGEXP, espressioni regolari, cerca su google

Avatar utente
Carlo
Amministratore
Amministratore
Messaggi: 9957
Iscritto il: 19/04/2009, 10:24
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 7.1.0
Database: MySQL(i) 10.0.27-MariaDB-cll-lve
Località: Puglia
Contatta:

Re: Ricavare variabili da una stringa

Messaggio da Carlo » 29/09/2010, 18:40

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.
MODs | Stili | Traduzioni MOD
Ogni MP contenente una richiesta di supporto verrà ignorato.

Rispondi

Torna a “PHP - MySQL”

Chi c’è in linea

Visitano il forum: Nessuno e 40 ospiti