regex - Perl 正则表达式交替

标签 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 .任何人都可以请解释为什么?

最佳答案

交替运算符不对单词进行操作,这意味着

(\S+ GB) or (MB)

添加非捕获括号:
/Data (\S+ (?:GB|MB))/

您可以使用字符类进一步简化:
/Data (\S+ [GM]B)/

关于regex - Perl 正则表达式交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696667/

相关文章:

java - 如何检查整数中的重复序列

Python使用正则表达式从字符串中捕获组

perl - mkdir 无法在 perl 中创建目录

perl - 用 ` ` 替换任何标签内容中的所有空格

php - 加载剥离 javascript 并将其放入数组中供以后使用的替代方法是什么

c# - 为什么要求 7 个字符的 C# 正则表达式接受 8 个字符?

python - 正则表达式:将子字符串替换为多个单词形式

regex - Perl if 语句混淆

multithreading - 在Windows中启用对Perl的线程支持?

perl - 日期和时间计算