Precedente :: Successivo |
Autore |
Messaggio |
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 03 Set 2012 15:11 Oggetto: Php,preg_replace e BBcode |
|
|
Ciao a tutti,
sono un po' arrugginito con le espressioni regolari e son qui per chiedere un aiutino: ho bisogno di far saltare da una stringa, tutti i tag bbcode che incontro (ma non il testo da formattare).
Pensavo di usare preg_replace() dandogli come primo parametro un array contenente il pattern per i tag di apertura (che possono avere attributi) e quello di chiusura.
Per la chiusura no problem, tramite la regex:
i tag di chiusura spariscono.
Ma per l'apertura non mi quadra la non interpretazione del quantificatore +:
La regex qui sopra non funziona, non viene riscontrato nessun match se per esempio ho una stringa:
Io mi sarei aspettato di trovare "[B]".
Se però rimuovo il + il match avviene ma a me serve perchè potrei avere bbcode con più lettere e comunque con un attributo come per esempio:
Codice: |
[url=www...]bau[/url]
|
Testando con due tools online ottengo sempre picche quindi credo che effettivamente stia usando male il +.
In pratica ho bisogno di tradurre in regex:
Codice: |
trova tutte le sequenze che iniziano con il carattere "[" seguito da un gruppo di caratteri di almeno uno seguito da "]".
|
Qualcuno mi può dare una mano?
Thanks! |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 03 Set 2012 15:22 Oggetto: |
|
|
stai usando il / per delimitare?
comunque \[.+\] dovrebbe essere giusto, non ho idea di perché non debba andare... ma se non va fai \[..*\] a quel punto...
edit: aspetta, forse il problema è che devi usare operatori non greedy (lazy)? |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 03 Set 2012 15:38 Oggetto: |
|
|
Ciao SverX,
sì, uso lo / per chiudere il tag.
Seguendo i tuoi suggerimenti ho fatto un po' di prove sia con gli operatori lazy che con i greedy ma non cambia nulla.
Al massimo sono arrivato a far saltar via la quadra di chiusura del tag di apertura.
Con \[..*\] mi vengono rancati sia i tag di apertura che di chiusura ma anche il contenuto (che purtroppo deve restare).
La cosa che non capisco è il perchè il + funzioni nella chiusura ma non nell'apertura visto che il + agisce sul . e basta e non su tutto quello che lo precede. |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 03 Set 2012 16:49 Oggetto: |
|
|
Svelato l'arcano ma non ho ancora la regex che mi serve.
Mi son accorto che i due test online che ho usato il match lo trovavano solo che con la mia regex il match è tutta la stringa compresa tra i due tag.
Infatti:
Codice: |
trova tutte le sequenze che iniziano con il carattere "[" seguito da un gruppo di caratteri di almeno uno seguito da "]".
|
ha come match una stringa del tipo:
Codice: |
[B]ciao ciao ciao[/B]
|
ossia la prima quadra, una serie di almeno un carattere formata da qualunque simbolo (quadre comprese) e poi una quadra chiusa.
Quindi rigiro la domanda: cosa uso per rimuovere i tag nelle forme:
Codice: |
[B]
oppure
[B=pippo]
|
con B qualunque sequenza di lettere? |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 03 Set 2012 17:18 Oggetto: |
|
|
Dunque,
anche se potrebbe diventare più precisa son riuscito a creare una regex che sembra funzionare, anzi, da sola mi fa saltare sia l'apertura che la chiusura.
però che palle gente |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 04 Set 2012 10:25 Oggetto: |
|
|
mmm... ti fa saltare anche i tag singoli?
comunque forse è meglio:
(se funziona). Ovvero qualunque stringa che:
inizia con [
opzionalmente seguita da /
seguita da 1 o più caratteri qualsiasi, fino a trovare il primo ] (usando il modificatore ungreedy ? sul + ) |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 04 Set 2012 11:32 Oggetto: |
|
|
Ciao,
la mia regex pare andare e credo che faccia saltare anche il tag singolo (devo provare).
Farò anche dei test con la tua versione che effettivamente è più corretta.
Ti tengo comunque aggiornato.
Thanks. |
|
Top |
|
|
|