Reputation: 7707
I have a regex that I've verified in 3 separate sources as successfully matching the desired text.
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
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
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