preg_split non divide più delimitatori

Prova Il Nostro Strumento Per Eliminare I Problemi

IL preg_split La funzione in PHP è utile per dividere le stringhe in base a un modello di espressione regolare. Tuttavia, una presa con preg_split è che per impostazione predefinita non viene suddiviso in più istanze del delimitatore.

Ad esempio, se hai una stringa 'ciao>>mondo' e provi a dividerla nel carattere '>' utilizzando preg_split , potresti aspettarti un array con tre elementi: 'hello', '', 'world'. Ma invece, preg_split restituisce un array con due elementi: 'ciao', 'mondo'.

Il motivo è quello preg_split vede più caratteri delimitatori uno accanto all'altro come un'unica istanza. Quindi '>>' viene trattato come un singolo > delimitatore invece di due.

Comprendere PREG_SPLIT_NO_EMPTY

Il comportamento di non dividere più delimitatori è in parte dovuto al flag PREG_SPLIT_NO_EMPTY che è abilitato per impostazione predefinita. Questa bandiera racconta preg_split per non restituire stringhe vuote nell'array dei risultati.

Quindi nell'esempio 'ciao>>mondo', se dividiamo > con PREG_SPLIT_NO_EMPTY, i due caratteri > uno accanto all'altro darebbero come risultato una stringa vuota tra di loro, che poi verrà scartata e non restituita nell'array finale.

Soluzioni

Se è necessario dividere più istanze di un delimitatore, inclusa la separazione di stringhe vuote, esistono un paio di approcci:

1. Disabilitare PREG_SPLIT_NO_EMPTY

Puoi passare il flag PREG_SPLIT_NO_EMPTY come terzo parametro per disabilitare questo comportamento:

|_+_|

Ora le stringhe vuote verranno mantenute nell'array dei risultati:

|_+_|

2. Utilizza invece preg_match_all

preg_match_all può anche dividere le stringhe in base a un modello regex, ma gestirà correttamente più delimitatori:

|_+_|

Questo divide e mantiene il delimitatore nel gruppo di acquisizione 1:

|_+_|

3. Dividi quindi filtra le stringhe vuote

Una terza opzione è restare fedeli preg_split ma filtra successivamente le stringhe vuote, se necessario:

|_+_|

Altre funzioni di suddivisione delle stringhe

Esistono alcune altre funzioni di suddivisione delle stringhe che gestiscono più delimitatori in modo diverso da preg_split:

esplodere

IL esplodere la funzione divide una stringa su un delimitatore di stringa e gestisce correttamente più istanze:

|_+_|

Risultato:

|_+_|

str_split

str_split divide le stringhe in singoli caratteri, consentendoti di dividere qualsiasi carattere inclusi i multipli:

|_+_|

Risultato:

|_+_|

pezzo_diviso

pezzo_diviso divide le stringhe in parti più piccole separate da un delimitatore specificato. Buono per spezzare stringhe lunghe:

|_+_|

Risultato:

|_+_|

mb_split

mb_split è utile per dividere le stringhe in modo sicuro durante la gestione di caratteri multibyte.

Quando è utile Preg_Split?

Nonostante alcune stranezze, preg_split è ancora molto utile ogni volta che è necessario dividere stringhe complesse utilizzando modelli di espressioni regolari. Ad esempio:

  • Suddivisione su diversi tipi di delimitatori in una stringa
  • Dividere gli spazi bianchi durante la gestione di tabulazioni, spazi, ritorni a capo, ecc.
  • Divisione mantenendo o rimuovendo i delimitatori

Basta essere consapevoli di come gestisce i delimitatori consecutivi e aggirare il problema disabilitando PREG_SPLIT_NO_EMPTY o utilizzando un approccio alternativo, se necessario.

Riepilogo

  • preg_split per impostazione predefinita non divide le stringhe su più caratteri delimitatori a causa del flag PREG_SPLIT_NO_EMPTY.
  • Le soluzioni includono la disabilitazione di PREG_SPLIT_NO_EMPTY, utilizzando preg_match_all o funzioni alternative come esplodere O str_split .
  • Comprendere questo comportamento ti consente di aggirarlo quando necessario utilizzando lo strumento migliore per il tuo lavoro di suddivisione delle stringhe.

Guarda Anche: