|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: London, United Kingdom
Messaggi: 959
|
[PHP] preg_replace
Salve, avrei bisogno una spiegazione per la funzione preg_replace
Non mi piace scomodare la gente specialmente per sciocchezze del genere ma ho cercato senza alcun risultato Ho capito cosa fa la funzione ma non capisco ancora alcune cose... esempio: Codice PHP:
2. Il \\1 che cosa fa? 3. e il (.*?) ? Grazie P.S: Non incollatemi testi da php.net perché l'ho letta tutta la pagina dedicata a questa funzione ma non ci ho capito comunque niente
__________________
zattix |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Come espressione regolare, sarebbe corretto: \[b\](.*?)\[\/b\] I caratteri [ e ] sono "speciali" nelle espressioni regolari. Il / pure ma è una cosa specifica della preg_replace (lo vediamo dopo). Dal momento che l'espressione regolare è specificata come stringa "literal' in PHP, bisogna ulteriormente fare l'escape del carattere '\', perché in PHP, nelle stringhe il \ è nuovamente un carattere "speciale". Quindi avremo come stringa: "\\[b\\](.*?)\\[\\/b\\]" La preg_replace si aspetta che l'espressione regolare sia messa tra / ... /. Quindi avremo: "/\\[b\\](.*?)\\[\\/b\\]/" Ecco il perché del / è stato fatto l'escape con \\/ In definitiva abbiamo: $message = preg_replace("/\\[b\\](.*?)\\[\\/b\\]/", "<B>\\1</B>", $message); Data una stringa in input del tipo: Codice:
[b]Ciao[/b] [b]Hello[/b] Codice:
<B>Ciao</B> <B>Hello</B> Questo perché il *? è un quantificatore "riluttante", cerca di catturare meno caratteri possibili. In pratica si ferma al [/b] dopo Ciao, non quello dopo Hello. Le parentesi servono per formare un "sub-pattern". Quello che viene catturato dentro le parentesi, può essere poi riportato nella sostituzione usando la notazione \x (quindi nella stringa PHP \\x). Dove x è un numero 1, 2, .... Ho soddisfatto tutte le tue domande??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:32.



















