.Net regex matching $ with the end of the string and not of line, even with multiline enabled
It is clear your text contains a linebreak other than LF. In .NET regex, a dot matches any char but LF (a newline char, \n
).
See Multiline Mode MSDN regex reference
By default,
$
matches only the end of the input string. If you specify the RegexOptions.Multiline option, it matches either the newline character (\n
) or the end of the input string. It does not, however, match the carriage return/line feed character combination. To successfully match them, use the subexpression\r?$
instead of just$
.
So, use
@"^(#+).+?\r?$"
The .+?\r?$
will match lazily any one or more chars other than LF up to the first CR (that is optional) right before a newline.
Or just use a negated character class:
@"^(#+)[^\r\n]+"
The [^\r\n]+
will match one or more chars other than CR/LF.