.Net 正则表达式匹配 $ 与字符串的结尾而不是行的结尾,即使启用了多行

use*_*509 5 c# regex markdown syntax-highlighting uwp

我正在尝试突出显示降价代码,但遇到了 .NET 正则表达式多行选项的这种奇怪行为。

以下表达式:^(#+).+$适用于任何在线正则表达式测试工具:

在此处输入图片说明

但它拒绝与 .net 一起使用:

在此处输入图片说明

它似乎没有考虑 $ 标签,并且只是突出显示直到字符串末尾的所有内容,无论如何。这是我的 C#

RegExpression = new Regex(@"^(#+).+$", RegexOptions.Multiline)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Wik*_*żew 7

很明显,您的文本包含除 LF 之外的换行符。在 .NET 正则表达式中,点匹配除 LF(换行符,\n)以外的任何字符。

请参阅多行模式MSDN 正则表达式参考

默认情况下,$仅匹配输入字符串的结尾。如果您指定RegexOptions.Multiline选项,它将匹配换行符 ( \n) 或输入字符串的结尾。但是,它不匹配回车/换行字符组合。要成功匹配它们,请使用子表达式\r?$而不仅仅是$.

所以,使用

@"^(#+).+?\r?$"
Run Code Online (Sandbox Code Playgroud)

.+?\r?$将懒惰地匹配比LF之外的任何一个或更多个字符到第一个CR(即是可选的)换行之前。

或者只使用否定字符类:

@"^(#+)[^\r\n]+"
Run Code Online (Sandbox Code Playgroud)

[^\r\n]+将匹配比CR / LF之外的一个或更多个字符。