/*
This Fuzzy RegexMatcher does not handle *,?, ^ etc., but, it takes in a tolerance/forgiveness factor.
With a forgiveness value of 1, regex "ac" would match strings like "abc" or "ad" or "c". With a forgiveness factor of 0, the match would fail.
*/
This Fuzzy RegexMatcher does not handle *,?, ^ etc., but, it takes in a tolerance/forgiveness factor.
With a forgiveness value of 1, regex "ac" would match strings like "abc" or "ad" or "c". With a forgiveness factor of 0, the match would fail.
*/
using System;
namespace StringHelpers
{
public static partial class RegexMatcher
{
public static bool AreSimilar(char[] str, char[] pattern, int forgiveness)
{
// Args check todo
for (int i = 0; i <= str.Length - pattern.Length; i++)
{
if (AreSimilar(str, pattern, i/*str index*/, 0/*pattern index*/, forgiveness)) return true;
}
return false;
}
private static bool AreSimilar(char[] str, char[] pattern, int si, int pi, int forgiveness)
{
if (pi >= pattern.Length) return true;
if (si >= str.Length) return false;
if (str[si] == pattern[pi])
{
return AreSimilar(str, pattern, si + 1, pi + 1, forgiveness);
}
else if (forgiveness > 0)
{
return AreSimilar(str, pattern, si, pi + 1, forgiveness - 1)|| AreSimilar(str, pattern, si + 1, pi + 1, forgiveness - 1);
}
return false;
}
}
}
No comments:
Post a Comment