我是perl的初学者,我想将带有记录的文件放入从AA到/或每个数组元素的数组中。所以任何人都可以帮助我。
我的INPUT FILE是这样的:
\
AA c0001
BB afsfjgfjgjgjflffbg
CC表
DD hhhfsegsksgk
EB jksgksjs \
AA e0002
BB rejwkghewhgsejkhrj
CC主席
DD egrhjrhojohkhkhrkfs
VB rkgjehkrkhkh; r
\
这是一个txt文件格式所以,从这个文件我应该收集所有从AA开始的信息到\为'table'这样的东西在ist记录中也有'chair'在第二个记录,我需要收集所有'CC table'和'CC chair'的记录,因为它们随机排列在整个文件中,还有大约数百条记录,我需要收集这些桌子和椅子。所以我想把我的文件放到一个数组中,首先让它的每个元素从AA到。有没有其他想法做这件事。有人可以帮我编写制作数组的代码。我将非常感谢。
答案 0 :(得分:1)
当您寻找特定的字符串时,正则表达式是您最好的选择。正则表达式是告诉Perl您正在寻找什么类型的字符串的简短方法。它还允许您捕获字符串的一部分,以便您以后不必提取它们。
您的案例很复杂,因为您的记录跨越多行,但正则表达式可以处理而不是使用\m
选项。它使^
和$
匹配行首和行尾,而不是字符串开头和字符串结尾。这意味着你可以说
my ($type) = $record =~ /^CC (.+)/m;
^
匹配行的开头,C
匹配文字C,空格与文字空间匹配,括号与任何内容不匹配(它们启动捕获组),{ {1}}匹配除换行符之外的任何字符,.
表示匹配表示匹配上述内容中的一个或多个(即+
)。
此正则表达式由.
运算符应用于$record
中的字符串。
列表上下文中的匹配返回其捕获组,因此通过将=~
放在括号中,我们使匹配将捕获组返回到$type
变量。一旦我们可以访问记录的类型,一个简单的if语句允许我们按照您的意愿过滤记录:
$type
如果您使用的是Perl 5.10或更高版本且启用了feature
pragma,则可以使用if ($type eq "chair") {
#do chair stuff
} elsif ($type eq "table") {
#do table stuff
} else {
die "I don't know what to do with '$type'";
}
/ given
语法,这对于这种逻辑来说更好:
when
中详细了解正则表达式