/// <summary>
 /// Initialises a new instance of the <see cref="VirtualStringMatcher"/> class on a <see cref="IVirtualString"/>.
 /// </summary>
 /// <param name="text">The Virtual String to parse.</param>
 /// <param name="startIndex">Index where the match must start in the <paramref name="text"/>.</param>
 /// <param name="length">
 /// Number of character to consider in the string.
 /// If <paramref name="startIndex"/> + length is geater than the length of the string, an <see cref="ArgumentException"/> is thrown.
 /// </param>
 public VirtualStringMatcher(IVirtualString text, long startIndex, long length)
 {
     if (text == null)
     {
         throw new ArgumentNullException(nameof(text));
     }
     if (_startIndex < 0 || _startIndex > text.Length)
     {
         throw new ArgumentException(nameof(text));
     }
     _text       = text;
     _length     = length;
     _startIndex = startIndex;
 }
 /// <summary>
 /// Initialises a new instance of the <see cref="VirtualStringMatcher"/> class on a non null string.
 /// </summary>
 /// <param name="text"></param>
 /// <param name="startIndex"></param>
 public VirtualStringMatcher(IVirtualString text, long startIndex = 0)
     : this(text, startIndex, text.Length)
 {
 }