我有以下字符串:
Data 250 MB
Data 1.5 GB
Data 10 GB
Run Code Online (Sandbox Code Playgroud)
我只需捕获值250 MB, 1.5 GB, 10 GB.所以我写了这个表达
(my $data) = $str1 =~ /Data (\S+ GB|MB)/ or die "$str1\n";
这适用于GB中的数据,但对于MB,我得到了结果Data 250 MB.任何人都可以解释原因吗?
交替操作员不会对单词进行操作,这意味着
(\S+ GB) or (MB)
Run Code Online (Sandbox Code Playgroud)
添加非捕获括号:
/Data (\S+ (?:GB|MB))/
Run Code Online (Sandbox Code Playgroud)
您可以使用字符类进一步简化:
/Data (\S+ [GM]B)/
Run Code Online (Sandbox Code Playgroud)
您将捕获组定义为(\S+ GB|MB)匹配\S+ GB 或 MB(即|应用于整个捕获组).
你想要:
/Data (\S+ GB|\S+ MB)//Data (\S+ (GB|MB))//Data (\S+ (?:GB|MB))/利用非捕获组,甚至更好.