-1

嗨,我对 Perl 很陌生,现在正在寻求帮助来解析一行简单的代码。

我需要解析的是

#include "filename"

我只需要正则表达式来获取文件名。

我知道 Python 中有 split 方法可以做到这一点,不知道 Perl 中是否有类似的 func

谢谢

4

3 回答 3

5
my ($fn) = $include =~ /"([^"]*)"/;

或者

my ($fn) = $include =~ /^\s*#\s*include\s*"([^"]*)"/;
于 2013-03-13T06:26:06.043 回答
2

可以split在 Perl 中做到这一点:

my $fn = (split('"', $include_line))[1];

...但这是一种非常迟钝的方式。我会选择

my ($fn) = $line =~ /^#include +"([^"]+)"/;

相反,如果您的输入文件包含带有双引号文本的任何其他行,则它更清晰,并且还具有在非#include行上不返回任何内容而不是返回误报的优点。

于 2013-03-13T09:12:12.907 回答
1

如果您真正需要的是从一堆 c/c++ 文件中提取标头,您可以使用ack轻松完成:

ack --cc '#include "([^"]+)' -h --output=\$1  | sort | uniq
于 2013-03-13T07:25:07.290 回答