Expresión regular donde * coincide con todos los caracteres excepto barra diagonal inversa y línea nueva

Esto es lo que bash implementar

Enlace a la documentation de gitignore : página de manual de gitignore

De lo contrario, git trata el patrón como un comodín de shell adecuado para el consumo por fnmatch (3) con el indicador FNM_PATHNAME: los comodines en el patrón no coincidirán con a / en el nombre de ruta. Por ejemplo, "Documentation / .html" coincide con "Documentation / git.html" pero no con "Documentation / ppc / ppc.html" o "tools / perf / Documentation / perf.html".

Intenté esto en el código

patternEscapedForStar = patternEscaped.Replace(@"\*", "[^\\]*"); 

La línea anterior es para cambiar el comportamiento de * en la expresión regular para que coincida con todos los caracteres excepto "\" en la ruta del file o carpeta. Sin embargo, no parece coincidir como se esperaba. Como estoy usando patrones de gitignore, convertí blob en expresión regular antes del reemploop que mencioné anteriormente.

Por cierto, me dedico a expresiones regulares y no soy experto de ninguna manera. Gracias por tu ayuda.

EDITAR:

Aquí está el código completo

 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; } 

El problema al que se enfrenta es por "[^\\]*" . Como \ se usa para describir los caracteres de escape, "\\" resuelve en el carácter literal \ , que es el único carácter que Regex su Regex .

Y ahí es donde todo explota; Dado que \ es también un personaje especial para Regex , obtenemos el problema, que Regex realmente no sabe qué hacer con @"[^\]*" .

Larga historia corta: la respuesta correcta es

 patternEscapedForStar = patternEscaped.Replace(@"\*", @"[^\\]*"); 

o

 patternEscapedForStar = patternEscaped.Replace(@"\*", "[^\\\\]*");