use*_*509 5 c# regex markdown syntax-highlighting uwp
我正在尝试突出显示降价代码,但遇到了 .NET 正则表达式多行选项的这种奇怪行为。
以下表达式:^(#+).+$适用于任何在线正则表达式测试工具:
但它拒绝与 .net 一起使用:
它似乎没有考虑 $ 标签,并且只是突出显示直到字符串末尾的所有内容,无论如何。这是我的 C#
RegExpression = new Regex(@"^(#+).+$", RegexOptions.Multiline)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
很明显,您的文本包含除 LF 之外的换行符。在 .NET 正则表达式中,点匹配除 LF(换行符,\n)以外的任何字符。
默认情况下,
$仅匹配输入字符串的结尾。如果您指定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之外的一个或更多个字符。