private static String BuildMatch(String pattern, String userAgent, String browser, Int32 versionIndex, String browserNameVersionFallback, out String browserName, out Int64 majorVersion, out Int64 minorVersion, out Int64 buildVersion)
{
browserName = browser;
majorVersion = 0;
minorVersion = 0;
buildVersion = 0;
Match match = Regex.Match(userAgent, pattern, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
if (match.Success)
{
string key = match.Groups[versionIndex].Value;
key = key.Replace("_", ".");
String[] versions = key.Split('.');
// Handle minor build versioning without dot syntax (leading zeroes)
// (9.06 becomes 9.0.6)
if (versions.Length > 1 && versions[1].StartsWith("0"))
{
key = key.Replace(versions[0] + "." + versions[1], versions[0] + ".0." + Convert.ToInt64(versions[1]));
versions = key.Split('.');
}
if (versions.Length > 0)
{
if (versions[0].Length > 18)
{
versions[0] = versions[0].Substring(0, 18);
}
if (H3Identify.IsPureNumeric(versions[0]))
{
majorVersion = Convert.ToInt64(versions[0]);
}
}
if (versions.Length > 1)
{
if (versions[1].Length > 18)
{
versions[1] = versions[1].Substring(0, 18);
}
if (H3Identify.IsPureNumeric(versions[1]))
{
minorVersion = Convert.ToInt64(versions[1]);
}
}
if (versions.Length > 2)
{
if (versions[2].Length > 18)
{
versions[2] = versions[2].Substring(0, 18);
}
if (H3Identify.IsPureNumeric(versions[2]))
{
buildVersion = Convert.ToInt64(versions[2]);
}
}
browser += " " + majorVersion + "." + minorVersion + (buildVersion > 0 ? "." + buildVersion : "");
}
else
{
if (browserNameVersionFallback != "")
{
browser = browserName = browserNameVersionFallback;
}
}
return browser;
}