Perl:从字符串中提取多个数字

4

有谁能帮我更正以下代码。我想从输入字符串中提取两个数字。

  input string [7:0] xxxx

我希望将数字'7'和'0'加载到两个变量(min和max)中。 我尝试通过以下方式实现:

my ($max, $min);
($max, $min) = $_ =~ /[(\d+):(\d+)]/;
print "min: $min max $max\n";

我得到的结果是
Use of uninitialized value in concatenation (.) or string at constraints.pl line 16, <PH> line 165.
min:  max: 1

问候

2个回答

7

[]是正则表达式元字符,因此您需要对它们进行转义。

($max, $min) = $_ =~ /\[(\d+):(\d+)\]/;

括号被用来表示字符类:[ ... ],它匹配其中的字符,例如[abc]匹配a

1
另外,你可以像这样合并第1行和第2行:my ($max, $min) = $_ =~ /[(\d+):(\d+)]/; 我喜欢在可能的情况下一步声明和赋值。 - Andrejovich
1
@Andrejovich 如果你保留反斜杠,是可以的。通常情况下,我会建议你使用最简短的形式:my ($max, $min) = /\[(\d+):(\d+)\]/,其中 $_ =~ 部分是隐含的。这种写法经常让初学者感到困惑。 - TLP
哦,你说得完全正确。我应该复制/粘贴你的代码,而不是原帖的代码。 - Andrejovich

0

TLP 是正确的。 [] 是元字符,任何这样的字符都需要转义,例如 . () [] * 等等,以便将其用于字面匹配。 这将解决您的问题。

($max, $min) = $_ =~ /\[(\d+):(\d+)\]/;

如果$max$min或两者都为空,即[ 7: ][ : ][ : 2][ ],则可能会收到警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接