s15199d
s15199d

Reputation: 7707

C# Regex Pattern Conundrum

I have a regex that I've verified in 3 separate sources as successfully matching the desired text.

  1. http://regexlib.com/RETester.aspx
  2. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx,
  3. http://sourceforge.net/projects/regextester/

But, when I use the regex in my code. It does not produce a match. I have used other regex with this code and they have resulted in the desired matches. I'm at a loss...

string SampleText = "starttexthere\r\nothertexthereendtexthere";
string RegexPattern = "(?<=starttexthere)(.*?)(?=endtexthere)";
Regex FindRegex = new Regex(@RegexPattern);
Match m = FindRegex.Match(SampleText);

I don't know if the problem is my regex, or my code.

Upvotes: 5

Views: 137

Answers (2)

Mike Dinescu
Mike Dinescu

Reputation: 55720

The problem is that your text contains a \r\n which means it is split across two lines. If you want to match the whole string you have to set the option to match across multiple lines, and to change the behavior of the . to include the \n (new-line character) in matched

 Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline);

Upvotes: 7

Cristian Lupascu
Cristian Lupascu

Reputation: 40516

You don't need RegexOptions.Multiline.

The problem in your case is that the dot matches any character except line break characters (\r\ and \n).

So, you'll need to define your regex pattern like so: (?<=starttexthere)[\w\r\n]+(?=endtexthere) in order to specifically match text across line breaks.

Here's an online running sample: http://ideone.com/ZXgKar

Upvotes: 0

Related Questions