errore preg_split php quando si passa da dividere a preg_split
-
21-09-2019 - |
Domanda
ricevo questo avvertimento da PHP dopo la modifica da Spalato a preg_split per PHP 5.3 compatibilità:
PHP Warning: preg_split(): Delimiter must not be alphanumeric or backslash
il codice php è:
$statements = preg_split("\\s*;\\s*", $content);
Come posso risolvere l'espressione regolare non utilizzare più \
per
Grazie!
Soluzione
L'errore è perché avete bisogno di un carattere delimitatore attorno al espressione regolare.
$statements = preg_split("/\s*;\s*/", $content);
Altri suggerimenti
Anche se la questione è stata contrassegnata come risposta due minuti dopo essere stato chiesto, vorrei aggiungere alcune informazioni per i record.
simile al modo in stringhe sono delimitate da virgolette, le espressioni regolari in molte lingue, come Perl o JavaScript, sono delimitati da slash. Questo porterà a espressioni che cercano in questo modo:
/\s*;\s*/
Questa sintassi consente anche di specificare modificatori:
/\s*;\s*/Ui
le espressioni regolari compatibili con Perl di PHP (aka preg _... funzioni) ereditano questo. Tuttavia, lo stesso PHP non supporta questa sintassi modo alimentazione preg_split () con /\s*;\s*/
solleverebbe un errore di analisi. Al contrario, è racchiuso con le citazioni per costruire una stringa regolare.
Una cosa si deve prendere in considerazione è che PHP permette di cambiare il delimitatore. Per esempio, è possibile utilizzare questo:
@\s*;\s*@Ui
Che cosa è buono per? Semplifica l'uso di slash all'interno l'espressione dal momento che non hanno bisogno di sfuggire loro. Confronto:
/^\/home\/.*$/i
@^/home/.*$@i
Se non ti piace delimitatori, è possibile utilizzare T-Regx strumento :
pattern("\\s*;\\s*")->split($content):
È inoltre possibile utilizzare Pattern::of("\\s*;\\s*")->split()