[e] sono caratteri speciali in un'espressione regolare. Sono usati per elencare i personaggi di una partita. [a-z]
corrisponde a qualsiasi lettera minuscola tra "a" e "z". [03b]
corrisponde a "0", "3" o "b". Per abbinare i caratteri "[" e "]", devi sfuggire a loro con uno \
precedente.
Attualmente il tuo codice dice "sostituire qualsiasi carattere di []().
con una stringa vuota" (riordinato dall'ordine in cui sono stati digitati per maggiore chiarezza).
partita Greedy:
preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]
Una partita avido potrebbe corrispondere più [s] e s. Questa espressione richiederebbe an example [of "sneaky"] text [with more "sneaky"] here
e trasformarla in an example here
.
Perl ha una sintassi per una partita non avido (molto probabilmente non si vuole essere avidi):
partite
preg_replace('/\[.*?\]/', '', $str);
non avidi cercano di catturare il minor numero di caratteri possibile. Utilizzando lo stesso esempio: an example [of "sneaky"] text [with more "sneaky"] here
diventa an example text here
.
solo fino al primo segue]:
preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]
Questo è più esplicito, ma più difficile da leggere. Usando lo stesso testo di esempio, otterresti l'output dell'espressione non-golosa.
Nota che nessuno di questi si occupa esplicitamente dello spazio bianco. Gli spazi su entrambi i lati di [e] rimarranno.
Si noti inoltre che tutti questi errori possono avere un input non valido. Più [s] e s senza corrispondenze potrebbero causare un risultato sorprendente.
Mille grazie per la spiegazione! –
Hmm, l'input non valido è qualcosa in cui posso incorrere. È possibile gestire l'istanza di non avere un abbinamento]? –
Dovrei sapere come lo vuoi gestire. Cosa speri che faccia con input malformati? –