我要浏览头文件列表,然后保存其中包含的文件。我的问题是模式不匹配。
在此链接中,您可以找到我认为可以使用的模式:https://regex101.com/r/jbJLxT/3
string rgxPat = "\\#include\\s+\"(?:\\w+\\/)*(\\w +\\.(?:hed|he|hdb|h))\"";
Regex incLRgx = new Regex(rgxPat, RegexOptions.IgnoreCase);
for (int i = alrdyChckd; i < missFiles.Count; i++)
{
tmpStr = baseSBFolder + "\\" + missFiles[i].getPath() + "\\" + missFiles[i].getName();
System.IO.StreamReader actFile = new System.IO.StreamReader(tmpStr);
while((actLine = actFile.ReadLine()) != null)
{
Match match = incLRgx.Match(actLine);
if(match.Success)
{
missFiles.Add(baseSB.getFileByName(match.Groups[1].Value.ToString()));
}
}
alrdyChckd++;
}
我检查了调试变量,并且匹配模式始终返回错误的返回值,而模式和实际行似乎相同。 这也是一个问题,我无法使用字符串= @“ [pettern]”形式添加双qoutes,因为双任务将关闭模式。
答案 0 :(得分:2)
这将为您提供路径:
/^\#include\s+"(.+)"$/gm
$1
的输出:
FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_cpif.h
EbsPartition/EbsCluster/EbsCluster_generic/EbsCore/Src/ebscore_basetypes.h
FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_types.h
如果只需要文件名,请使用:
/^\#include\s+".*\/([^\/]+)"$/gm
和$1
将为您提供:
rsc_cpif.h
ebscore_basetypes.h
rsc_types.h
答案 1 :(得分:0)
您可以按名称捕获组以获取文件路径:
\#include(?<path>\s+"(?:\w+\/)*(\w+\.(?:hed|he|hdb|h))")
match.Groups["path"].Value.ToString()
这将为您提供捕获为"FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_cpif.h"
的文件路径