这是我要实现的
链接到 gitignore 文档:gitignore 手册页
否则,git 将模式视为适合 fnmatch(3) 使用的带有 FNM_PATHNAME 标志的 shell glob:模式中的通配符将不匹配路径名中的 /。例如,“Documentation/ .html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。
我确实在代码中尝试过
patternEscapedForStar = patternEscaped.Replace(@"\*", "[^\\]*");
上一行是改变正则表达式中 * 的行为,以匹配文件或文件夹路径中除“\”之外的所有字符。但是,它似乎与预期的不匹配。由于我使用的是 gitignore 模式,因此在上面提到的替换之前,我确实将 blob 转换为正则表达式。
顺便说一句,我涉足正则表达式,并且在任何方面都不是专家。谢谢你的帮助。
编辑:
这是完整的代码
public static bool PatternMatch(string str, string pattern, string type)
{
string patternEscaped = string.Empty;
string patternEscapedForStar = string.Empty;
string patternEscapedForQuestionMark = string.Empty;
bool returnValue = false;
try
{
patternEscaped = Regex.Escape(pattern);
patternEscapedForStar = patternEscaped.Replace(@"\*", ".*");
if (type == "P")
{
patternEscapedForStar = patternEscapedForStar.Replace(@".*", "[^\\]*");
}
patternEscapedForQuestionMark = patternEscapedForStar.Replace(@"\?", ".");
returnValue = new Regex(patternEscapedForQuestionMark, RegexOptions.IgnoreCase | RegexOptions.Singleline).IsMatch(str);
}
catch (Exception ex)
{
Log.LogException(ex);
}
return returnValue;
}