wsp-10323 Step 10 final
This commit is contained in:
parent
477b82e69c
commit
9fcad0455d
10 changed files with 2270 additions and 319 deletions
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace WebsitePanel.Providers.Virtualization.Extensions
|
||||
{
|
||||
public static class StringExtensions
|
||||
{
|
||||
public static string[] ParseExact(
|
||||
this string data,
|
||||
string format)
|
||||
{
|
||||
return ParseExact(data, format, false);
|
||||
}
|
||||
|
||||
public static string[] ParseExact(
|
||||
this string data,
|
||||
string format,
|
||||
bool ignoreCase)
|
||||
{
|
||||
string[] values;
|
||||
|
||||
if (TryParseExact(data, format, out values, ignoreCase))
|
||||
return values;
|
||||
else
|
||||
throw new ArgumentException("Format not compatible with value.");
|
||||
}
|
||||
|
||||
public static bool TryExtract(
|
||||
this string data,
|
||||
string format,
|
||||
out string[] values)
|
||||
{
|
||||
return TryParseExact(data, format, out values, false);
|
||||
}
|
||||
|
||||
public static bool TryParseExact(
|
||||
this string data,
|
||||
string format,
|
||||
out string[] values,
|
||||
bool ignoreCase)
|
||||
{
|
||||
int tokenCount = 0;
|
||||
format = Regex.Escape(format).Replace("\\{", "{");
|
||||
|
||||
for (tokenCount = 0; ; tokenCount++)
|
||||
{
|
||||
string token = string.Format("{{{0}}}", tokenCount);
|
||||
if (!format.Contains(token)) break;
|
||||
format = format.Replace(token,
|
||||
string.Format("(?'group{0}'.*)", tokenCount));
|
||||
}
|
||||
|
||||
RegexOptions options =
|
||||
ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
|
||||
|
||||
Match match = new Regex(format, options).Match(data);
|
||||
|
||||
if (tokenCount != (match.Groups.Count - 1))
|
||||
{
|
||||
values = new string[] { };
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
values = new string[tokenCount];
|
||||
for (int index = 0; index < tokenCount; index++)
|
||||
values[index] =
|
||||
match.Groups[string.Format("group{0}", index)].Value;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue