嗨,我对 Perl 很陌生,现在正在寻求帮助来解析一行简单的代码。
我需要解析的是
#include "filename"
我只需要正则表达式来获取文件名。
我知道 Python 中有 split 方法可以做到这一点,不知道 Perl 中是否有类似的 func
谢谢
my ($fn) = $include =~ /"([^"]*)"/;
或者
my ($fn) = $include =~ /^\s*#\s*include\s*"([^"]*)"/;
你可以split
在 Perl 中做到这一点:
my $fn = (split('"', $include_line))[1];
...但这是一种非常迟钝的方式。我会选择
my ($fn) = $line =~ /^#include +"([^"]+)"/;
相反,如果您的输入文件包含带有双引号文本的任何其他行,则它更清晰,并且还具有在非#include
行上不返回任何内容而不是返回误报的优点。
如果您真正需要的是从一堆 c/c++ 文件中提取标头,您可以使用ack轻松完成:
ack --cc '#include "([^"]+)' -h --output=\$1 | sort | uniq