regex - 正则表达式匹配后未定义 Perl $1 变量

标签 regex perl

这对我来说可能是一个非常基本的错误,但我已经被这个问题困住了很长时间,这让我很沮丧!

我正在使用 Perl 遍历 Python 代码文件并识别其变量。我正在使用 Perl 正则表达式来挑选空格之间的字母数字字符的子字符串。正则表达式工作正常并标识匹配项所属的行,但是当我尝试返回与正则表达式匹配的实际子字符串时,捕获变量 $1未定义。

这是我的正则表达式:

if ($line =~ /.*\s+[a-zA-Z0-9]+\s+.*/) {
    print $line;
    print $1;
}

这是错误:
x = 1
Use of uninitialized value $1 in print at ./vars.pl line 7, <> line 2.

据我了解,$1应该返回 x .我的代码哪里出错了?

最佳答案

您没有捕获结果:

if ($line =~ /.*\s+([a-zA-Z0-9]+)\s+.*/) {

如果你想匹配像 x = 1 这样的行并获得它的两个部分,您需要匹配并用括号捕获两者。一个粗略的方法:
if ( $line =~ /^\s* ( \w+ ) \s* = \s* ( \w+ ) \s* $/msx ) {
    my $var = $1;
    my $val = $2;
}

关于regex - 正则表达式匹配后未定义 Perl $1 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084332/

相关文章:

javascript - 如何从 javascript 中的 twitter 等字符串中提取@提及

java - 我该如何进行此搜索 db.collection.find( { foo :/^bar$/i } ); on mongo but using Mongo Java Driver

c# - 不匹配带有开头双引号的 YouTube 网址 - C# Regex

MySQL 正则表达式行为

perl - 关于Perl TCP套接字编程的问题

c# - 比赛中的比赛

arrays - 如何将 perl 哈希数组编码为未命名的 JSON 数组?

bash - 将 perl while 循环更改为 shell

perl - perl特殊变量$-[0]和$ + [0]是什么意思

perl - 如何使用 perl 按值对散列的散列进行排序?