|
|
|
![]() |
|
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: 00:14.