regex - while、数组和正则表达式的组合

标签 regex perl

循环失败。数组出了什么问题?

我希望正则表达式在解析第一个字符串时返回 B,在解析第二个字符串时返回 M

这样的正则表达式是如何构造的?

#!/usr/bin/perl

use warnings;
use strict;

my $a = "0.0 B/s";
my $b = "12.0 MiB/s";

while (defined (my $s = shift ("$a", "$b"))) {

    my $unit = $1 if ($a =~ m/.*([KMGT])i?B\/s$/);
    print "$unit\n";
}

最佳答案

shift 适用于数组,而不是列表。如果你想使用 while 循环,你需要预先声明一个包含 $a$b 的数组(顺便说一句, ,对于变量名来说是一个糟糕的选择)。

话虽如此,for 循环结构是更自然的选择:

for my $s ( $var1, $var2 ) { ... }

鉴于您正在尝试提取测量单位,为什么不以稍微不同的方式做事:

say for map { my ( $s ) = /$regex/; $s } $var1, $var2;

关于regex - while、数组和正则表达式的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085768/

相关文章:

php - 如何 preg_replace 字符串上的模式

javascript - 使用 BeautifulSoup 在 DOM setAttribute JavaScript 中获取值

正则表达式搜索子字符串

java - 在不同语言语法之间转换正则表达式的工具?

python - 如何捕获YouTube嵌入代码并转换为URL

javascript - 使用正则表达式反转字符串中的元音

Perl:检查您的文件是作为模块加载还是直接运行

perl - 使用 Perl 从文本中提取多个项目

perl - 我的 Perl 脚本出现 "2032 - EIF - CR char inside unquoted, not part of EOL @ pos"错误

Perl:将 Coderef 分配给方法而不使用符号表 Hack