我有一句臺詞:如何從Perl中的逗號分隔字符串中提取單詞?
$myline = 'ca,cb,cc,cd,ce';
我需要匹配CA到$ 1,CB到$ 2等。
不幸的是
$myline =~ /(?:(\w+),?)+/;
沒有按沒有工作。使用pcretest時,只能將'ce'轉換爲$ 1。 如何做到這一點? 我是否需要將它放入while循環?
謝謝!
我有一句臺詞:如何從Perl中的逗號分隔字符串中提取單詞?
$myline = 'ca,cb,cc,cd,ce';
我需要匹配CA到$ 1,CB到$ 2等。
不幸的是
$myline =~ /(?:(\w+),?)+/;
沒有按沒有工作。使用pcretest時,只能將'ce'轉換爲$ 1。 如何做到這一點? 我是否需要將它放入while循環?
謝謝!
使用方便嗎my @parts = split(/,/, $myline)
?
沒錯!最簡單的方法是使用分割! – 2009-12-08 09:41:20
如果元素的數量是可變的,那麼你就不會按照你想要的方式去做。
while($myline =~ /(\w+)\b/g) { # do something with $1 }
我會猜,你的真實數據比「CA,CB,CC,CD,CE」更復雜,但是如果它不是那麼使用:使用全局標誌,通過串迴路正則表達式可能不合理。你會更好的分隔字符分割字符串:
my @things = split ',', $myline;
你說得對。在我的情況下使用split更好。我爲什麼不想到它? – 2009-12-08 09:40:22
因爲它是Perl,有很多方法可以做到這一點。 – 2009-12-08 10:48:15
雖然split
是來解決問題的好辦法,在列表上下文中的捕獲正則表達式也是行之有效的。瞭解這兩種方法是有用的。
my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;
一個顯着的區別是split會保留空的條目,在逗號相鄰的位置給出'undef'。正則表達式方法會忽略這些地方,因爲它們不包含一個或多個單詞字符。 – 2009-12-08 14:57:25
查找到CSV PM的你可以從CPAN下載,即Text::CSV
或Text::CSV_XS
。
這將爲您提供您所需的信息,並解釋發生引用的逗號分隔值。
使用這些模塊可以很容易地將數據拆分出來,並通過它解析...
例如:
my @field = $csv->fields;
如果可以的話包含逗號,您可以使用CSV模塊,如http://search.cpan.org/~makamaka/Text-CSV-1.16/lib/Text/CSV.pm – 2009-12-09 12:23:05