|
@@ -624,41 +624,46 @@ namespace Godot
|
|
|
return instance.Length;
|
|
|
}
|
|
|
|
|
|
- // <summary>
|
|
|
- // Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
|
|
|
- // </summary>
|
|
|
- public static bool ExprMatch(this string instance, string expr, bool caseSensitive)
|
|
|
+ /// <summary>
|
|
|
+ /// Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
|
|
|
+ /// </summary>
|
|
|
+ private static bool ExprMatch(this string instance, string expr, bool caseSensitive)
|
|
|
{
|
|
|
- if (expr.Length == 0 || instance.Length == 0)
|
|
|
- return false;
|
|
|
+ // case '\0':
|
|
|
+ if (expr.Length == 0)
|
|
|
+ return instance.Length == 0;
|
|
|
|
|
|
switch (expr[0])
|
|
|
{
|
|
|
- case '\0':
|
|
|
- return instance[0] == 0;
|
|
|
case '*':
|
|
|
- return ExprMatch(expr + 1, instance, caseSensitive) || instance[0] != 0 && ExprMatch(expr, instance + 1, caseSensitive);
|
|
|
+ return ExprMatch(instance, expr.Substring(1), caseSensitive) || (instance.Length > 0 && ExprMatch(instance.Substring(1), expr, caseSensitive));
|
|
|
case '?':
|
|
|
- return instance[0] != 0 && instance[0] != '.' && ExprMatch(expr + 1, instance + 1, caseSensitive);
|
|
|
+ return instance.Length > 0 && instance[0] != '.' && ExprMatch(instance.Substring(1), expr.Substring(1), caseSensitive);
|
|
|
default:
|
|
|
- return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) &&
|
|
|
- ExprMatch(expr + 1, instance + 1, caseSensitive);
|
|
|
+ if (instance.Length == 0) return false;
|
|
|
+ return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) && ExprMatch(instance.Substring(1), expr.Substring(1), caseSensitive);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // <summary>
|
|
|
- // Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
- // </summary>
|
|
|
+ /// <summary>
|
|
|
+ /// Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
+ /// </summary>
|
|
|
public static bool Match(this string instance, string expr, bool caseSensitive = true)
|
|
|
{
|
|
|
+ if (instance.Length == 0 || expr.Length == 0)
|
|
|
+ return false;
|
|
|
+
|
|
|
return instance.ExprMatch(expr, caseSensitive);
|
|
|
}
|
|
|
|
|
|
- // <summary>
|
|
|
- // Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
- // </summary>
|
|
|
+ /// <summary>
|
|
|
+ /// Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
+ /// </summary>
|
|
|
public static bool MatchN(this string instance, string expr)
|
|
|
{
|
|
|
+ if (instance.Length == 0 || expr.Length == 0)
|
|
|
+ return false;
|
|
|
+
|
|
|
return instance.ExprMatch(expr, caseSensitive: false);
|
|
|
}
|
|
|
|