これが私が実装しようとしているものです
gitignoreのドキュメントへのリンク:gitignoreのマンページ
それ以外の場合、gitはパターンをFNM_PATHNAMEフラグを指定したfnmatch(3)による消費に適したシェルグロブとして扱います。パターン内のワイルドカードはパス名内の/と一致しません。たとえば、「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;
}