2011-03-28 89 views
10

我有一個我想分割的字符串。但分隔符是在運行時確定的,所以我需要將它作爲變量傳遞。爲什麼在`|`(管道)上拆分不能按預期工作?

類似my @fields = split(/$delimiter/,$string);不起作用。有什麼想法嗎?


輸入:

abcd|efgh|23 

預期輸出:

abcd 
efgh 
23 
+2

你的輸入,實際產出和預期產出將是非常有用的信息... – Sean 2011-03-28 19:40:19

+5

你沒有一個 「分隔符」,你有一個「分隔符」。 「分隔符」表示限制,即。它在兩端,就像雙引號。 「分隔符」位於元素之間,如「|」在您的示例輸入中。 – tadmc 2011-03-28 19:47:53

+0

[我如何處理Perl正則表達式中的特殊字符?](http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim 2011-03-29 08:24:57

回答

19

你需要逃避你的分隔符,因爲它是在正則表達式特殊字符。

選項1:

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

選項2:

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

有關更多信息,請參閱:「perldoc perlretut」,「perldoc perlre」並搜索/ \\ Q /並查看「perldoc -f quotemeta」。 – shawnhcorey 2011-03-28 21:21:51

+2

「split」的參數不是分隔符,而是分隔符。 – tchrist 2011-03-28 21:51:34

+0

不符合'perldoc -f split':「匹配PATTERN的任何內容都被視爲分隔字段的分隔符。」 – Sean 2011-03-29 20:50:08

相關問題