private static PerlRegexOptions TrimPcreRegexOption(string pattern, out int end)
{
// letters on right are PCRE options,
// parse them and return new pattern end.
// The remaining string is enclosed in delimiters.
Debug.Assert(pattern != null);
end = pattern.Length;
PerlRegexOptions result = PerlRegexOptions.None;
for (int i = pattern.Length - 1; i >= 0; i--)
{
var ch = pattern[i];
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
{
result |= ParsePcreRegexOption(ch);
}
else
{
// reached a delimiter
end = i + 1;
return result;
}
}
// invalid regex, we didn't reach a delimiter
return PerlRegexOptions.None;
}