2011-03-28 11 views
10

Ho una stringa che voglio dividere. Ma il separatore è determinato in fase di esecuzione e quindi ho bisogno di passarlo come variabile.Perché split su `|` (pipe) non funziona come previsto?

Qualcosa come my @fields = split(/$delimiter/,$string); non funziona. qualche idea?


Ingresso: Uscita

abcd|efgh|23 

atteso:

abcd 
efgh 
23 
+2

Il vostro contributo, la produzione reale, e l'uscita prevista sarebbero informazioni estremamente utile ... – Sean

+5

Non hai un "delimitatore", hai un "separatore". Un "delimitatore" segna i limiti, es. è ad entrambe le estremità, come le doppie virgolette. Un "separatore" va tra gli elementi, come il "|" nel tuo esempio di input. – tadmc

+0

possibile duplicato di [Come gestisco caratteri speciali in un'espressione regolare di Perl?] (Http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

risposta

19

Hai bisogno di sfuggire al tuo delimitatore, dal momento che è un carattere speciale nelle espressioni regolari.

Opzione 1:

$delimiter = quotemeta($delimiter); 
my @fields = split /$delimiter/, $string; 

Opzione 2:

my @fields = split /\Q$delimiter/, $string; 
+0

Per ulteriori informazioni, consultare: 'perldoc perlretut',' perldoc perlre' e cercare/\\ Q/e vedere 'perldoc -f quotemeta'. – shawnhcorey

+2

L'argomento di 'split' non è un delimitatore, ma un separatore. – tchrist

+0

Non secondo 'perldoc -f split':" Qualsiasi cosa che corrisponda a PATTERN è considerata come un delimitatore che separa i campi. " – Sean

Problemi correlati