How to Regex.IsMatch at a specified offset in .NET?

Posted by romkyns on Stack Overflow See other posts from Stack Overflow or by romkyns
Published on 2010-04-17T11:28:31Z Indexed on 2010/04/17 11:33 UTC
Read the original article Hit count: 187

Filed under:
|

Suppose I want to match "abc" within the string s only if it occurs exactly at index n.

int n = 2;
Console.WriteLine(new Regex("abc").IsMatch("01abc", n)); // true
Console.WriteLine(new Regex("abc").IsMatch("0123abc", n)); // true (but want false)
Console.WriteLine(new Regex("^abc").IsMatch("01abc", n)); // false (but want true)

Seems that the only way to achieve this without using Substring on the input is something like this:

var match = new Regex("abc").Match("0123abc", n);
Console.WriteLine(match.Success && match.Index == n);

This isn't too bad, except that when there is no match at the starting offset then the entire input will be scanned unnecessarily, which is probably slower for most regexes than actually creating a substring prior to the match. (I didn't time it though).

Am I missing an obvious overload or setting that would restrict a match to the supplied offset only?

© Stack Overflow or respective owner

Related posts about .NET

Related posts about regex