fork(3) download
  1. using System;
  2.  
  3. public class Test
  4. {
  5. public static void Main()
  6. {
  7. Console.WriteLine("Name.jpg: {0}", CompareWildcard("ran.jpg","*.jpg"));
  8. }
  9.  
  10.  
  11.  
  12. static bool CompareWildcard(string input, string mask)
  13. {
  14. CharEnumerator ie = input.GetEnumerator();
  15. CharEnumerator me = mask.GetEnumerator();
  16. return CompareWildcardInternal(ie, me);
  17. }
  18.  
  19.  
  20. static bool CompareWildcardInternal(CharEnumerator ie, CharEnumerator me)
  21. {
  22. CharEnumerator inputTryAhead;
  23. CharEnumerator maskTryAhead;
  24. while (me.MoveNext())
  25. {
  26. switch (me.Current)
  27. {
  28. case '?':
  29. if (!ie.MoveNext())
  30. {
  31. return false;
  32. }
  33. break;
  34. case '*': // non greedy match, first try * matches nothing
  35. do
  36. {
  37. inputTryAhead = (CharEnumerator)(ie.Clone());
  38. maskTryAhead = (CharEnumerator)(me.Clone());
  39. if (CompareWildcardInternal(inputTryAhead,maskTryAhead))
  40. {
  41. return true;
  42. }
  43. } while (ie.MoveNext());
  44. return false;
  45. case '\\':
  46. me.MoveNext();
  47. goto default;
  48. default:
  49. if (!ie.MoveNext() || ie.Current != me.Current)
  50. return false;
  51. break;
  52. }
  53. }
  54.  
  55. return !ie.MoveNext();
  56. }
  57.  
  58.  
  59. }
Success #stdin #stdout 0.03s 34816KB
stdin
Standard input is empty
stdout
Name.jpg: True