我想整理以下文本文件中的所有API:
DLL Name: msvcrt.dll
...
DLL Name: msvcrt.dll
...
DLL Name: KERNEL32.dll
...
DLL Name: WSOCK32.DLL
我想到了像
这样的东西$infostring = lc($infostring);
while ($infostring =~ /dll name:/g)
{
print "found dll\n";
}
唯一的问题是,如何获取实际的dll名称或至少找到找到的字符串的位置?
答案 0 :(得分:9)
您需要扩展正则表达式以捕获DLL的名称:
$infostring = lc($infostring);
while ($infostring =~ /dll name: (\S+\.dll)/g) {
print "found dll: $1\n";
}
\S+\.dll
将匹配一个或多个非空白字符,后跟“.dll”,括号将收集其中匹配的文本并将其存储在变量$1
中。 (如果您有多组括号,第二组将进入$2
,第三组将进入$3
等。)
编辑:在编写我的答案时,看起来输入规范是通过对问题的编辑而改变的...上面将是包含所有DLL名称的单个输入字符串。在新格式下,每个格式都在一个单独的行上,您需要使用:
while (my $infostring = <$input_filehandle>) {
$infostring = lc($infostring);
print "found dll: $1\n" if $infostring =~ /dll name: (\S+\.dll)/;
}
如果一行中没有多个匹配项,则无需在正则表达式上混淆/g
或循环匹配。
答案 1 :(得分:1)
while ($infostring =~ /DLL Name: (.*)/g)
{
print "found dll: $1\n";
}
请阅读perlre手册页。您需要使用捕获组(用括号表示)来捕获DLL的名称。然后,您可以使用$1
,$2
,...,$n