Perl正则表达式交替

时间:2015-11-13 15:52:10

标签: regex perl

我有以下字符串:

Data 250 MB
Data 1.5 GB
Data 10 GB

我只需捕获值250 MB, 1.5 GB, 10 GB。所以我写了表达式

(my $data) = $str1 =~ /Data (\S+ GB|MB)/ or die "$str1\n";

这适用于GB中的数据,但对于MB,我得到结果Data 250 MB。有人可以解释一下原因吗?

3 个答案:

答案 0 :(得分:9)

交替操作员不会对单词进行操作,这意味着

(\S+ GB) or (MB)

添加非捕获括号:

/Data (\S+ (?:GB|MB))/

您可以使用字符类进一步简化:

/Data (\S+ [GM]B)/

答案 1 :(得分:5)

您将捕获组定义为(\S+ GB|MB),其匹配\S+ GB MB(即|应用于整个捕获组。)< / p>

你想要:

  1. /Data (\S+ GB|\S+ MB)/
  2. 使用非捕获组
  3. /Data (\S+ (GB|MB))/,甚至更好/Data (\S+ (?:GB|MB))/

答案 2 :(得分:1)

尝试:

(my $data) = $str1 =~ /Data (\S+ [GM]B)/ or die "$str1\n";

它将匹配 G B或 M B