我有一个正则表达式,我需要确定某些函数类型是否在文件中。像这样:
$stringsetexists = grep {/void [s|S]et[\w]+\(\s*.*string/} <$fh>;
这是从 perl 文件运行的,尝试在 .cpp 文件中匹配如下函数:
void setChanName(const std::string & chanName)
void setChanNameFont(const std::string & font)
void setOSDMessage(const std::string & osdMessage)
void setOSDMessageFont(const std::string & font)
当我void [s|S]et[\w]+\(\s*.*string
通过诸如www.regextester.com之类的正则表达式测试器运行正则表达式(输入为:)时,所有这些都匹配(是的,我知道它们只匹配“字符串”的结尾。这就是我想要的)。
但是,当我在 perl 脚本中运行上述命令时,它找不到匹配项。我知道脚本正在正确打开文件,所以这不是问题。而且我知道 perl 脚本中的其他正则表达式可以工作。问题是什么?
编辑:混淆问题,以下正则表达式:
$stringsetexists = grep {/inline void [s|S]et[\w]+\(\s*.*string/} <$fh>;
在包含如下行的文件上运行时工作正常:
inline void setIPv6Address(const std::string & ipv6Address)
(不是正则表达式的唯一区别是在“void”之前添加了“inline”。文件中唯一的区别是在“void”之前添加了“inline”。
编辑 2:扩展我已经提出的内容,相关的代码块在这里:
open $fh, "<", $file;
$stringsetexists = grep {/inline void [s|S]et[\w]+\(\s*.*string/} <$fh>; #this works for all files that contain "inline void"
if ($file eq "OSDSettings.h") #I know this part runs, because the print statement inside properly prints out that it is in OSDSettings.h
{
$stringsetexists = grep {/void [s|S]et[\w]+\(\s*.*string/} <$fh>;
print $file." opened: ".$stringsetexists."\n";
}