2012-10-30 62 views
1

我有一個輸入變量,比如$a$a可以是數字或字符串,也可以是兩者的組合。剝離perl中的數字和字母表

我的問題是如何剝離變量來分隔數字和字母字符?

示例;

$a can be 'AB9' 

在這裏,我應該能夠將'AB'存儲在一個變量中,'9'存儲在其他中。

我該怎麼做?

回答

4

選中此版本,它可以在一個變量中使用1個或多個數字和字母字符。

#!/usr/bin/perl 

use strict; 
use Data::Dumper; 

my $var = '11a';       

my (@digits, @alphabetics); 

while ($var =~ /([a-zA-Z]+)/g) { 

    push @alphabetics, $1; 
} 

while ($var =~ /(\d+)/g) { 

    push @digits, $1; 
} 

print Dumper(\@alphabetics); 
print Dumper(\@digits); 
+0

那作品。非常感謝:) 聲明數組數字時出現錯字。 聲明爲@數字而不是@數字。 –

+0

謝謝!我修正了錯字:) –

3

下面就來表達它很快的一種方法:

my ($digits) = $input =~ /(\d+)/; 
my ($alpha) = $input =~ /([a-z]+)/i; 

say 'digits:  ' . ($digits // 'none'); 
say 'non-digits: ' . ($alpha // 'none'); 

用在這裏列表上下文匹配操作符是很重要的,否則,如果匹配成功它將返回。

如果你想獲得所有出現在輸入字符串,只需更改在列表環境的標量變量,以適當的數組:

my @digits = $input =~ /(\d+)/g; 
my @alpha = $input =~ /([a-z]+)/gi; 

say 'digits:  ' . join ', ' => @digits; 
say 'non-digits: ' . join ', ' => @alpha; 

對於my $input = '42AB17C',輸出

digits: 42, 17 
non-digits: AB, C 
+0

謝謝你的回答:) –