小编MAR*_*ARS的帖子

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

这对我来说可能是一个非常基本的错误,但是我已经被困在这个问题上很长时间了,它正在推动我的问题!

我正在使用Perl循环遍历Python代码文件并识别其变量.我使用Perl正则表达式在空格之间挑选出字母数字字符的子串.正则表达式正常工作,并确定了比赛属于线,但是当我试图返回正则表达式匹配的实际子,捕获变量$1是不确定的.

这是我的正则表达式:

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

这是错误:

x = 1
Use of uninitialized value $1 in print at ./vars.pl line 7, <> line 2.
Run Code Online (Sandbox Code Playgroud)

据我所知,$1应该回归x.我的代码在哪里出错了?

regex perl

3
推荐指数
1
解决办法
1597
查看次数

在Perl中解析结构化文本文件

我是Perl的新手,我在编写一个能够成功解析结构化文本文件的Perl脚本时遇到了极大的困难.

我有一个看起来像这样的文件集合:

name:
    John Smith
occupation:
    Electrician
date of birth:
    2/6/1961
hobbies:
    Boating
    Camping
    Fishing
Run Code Online (Sandbox Code Playgroud)

等等.字段名后面跟一个冒号,与这些字段关联的所有数据总是由一个选项卡缩进(\ t).

我想创建一个将字段内容与字段名称直接关联的哈希,如下所示:

 $contents{$name} = "John Smith"
 $contents{$hobbies} = "Boating, Camping, Fishing"
Run Code Online (Sandbox Code Playgroud)

或类似的规定.

到目前为止,我已经能够将所有字段名称自己变为哈希,但是我没有任何运气将字段数据转换成可以很好地存储在哈希中的表单.显然,替换/拆分新行后跟选项卡是行不通的(我试过,有点天真).我还尝试了一个粗略的前瞻,我从文件中创建了一个重复的行数组,并使用它来确定字段边界的位置,但它在内存消耗方面并不是那么好.

FWIW,目前我正在逐行浏览文件,但我并不完全相信这是最好的解决方案.有没有办法以简单的方式进行解析?

perl

3
推荐指数
1
解决办法
862
查看次数

标签 统计

perl ×2

regex ×1