我想整理以下文本文件中的所有API:
DLL Name: msvcrt.dll
...
DLL Name: msvcrt.dll
...
DLL Name: KERNEL32.dll
...
DLL Name: WSOCK32.DLL
Run Code Online (Sandbox Code Playgroud)
我想到了类似的东西
$infostring = lc($infostring);
while ($infostring =~ /dll name:/g)
{
print "found dll\n";
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,如何获取实际的dll名称或至少找到找到的字符串的位置?
您需要扩展您的正则表达式以捕获DLL的名称:
$infostring = lc($infostring);
while ($infostring =~ /dll name: (\S+\.dll)/g) {
print "found dll: $1\n";
}
Run Code Online (Sandbox Code Playgroud)
在\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)/;
}
Run Code Online (Sandbox Code Playgroud)
/g如果在一行中没有多个匹配,则无需在正则表达式上乱用或循环匹配.