我试图突出显示降价代码,但遇到了 .NET 正则表达式多行选项的奇怪行为。
下面的表达式:^(#+).+$
在任何在线正则表达式测试工具上都可以正常工作:
但它拒绝与 .net 一起使用:
它似乎没有考虑 $ 标签,只是突出显示所有内容,直到字符串末尾,无论如何。这是我的 C#
RegExpression = new Regex(@"^(#+).+$", RegexOptions.Multiline)
我缺少什么?
很明显,您的文本包含 LF 以外的换行符。在 .NET 正则表达式中,点匹配除 LF 之外的任何字符(换行符,\n
).
See 多行模式MSDN 正则表达式参考
默认情况下,$
仅匹配输入字符串的末尾。如果您指定正则表达式选项.多行选项,它匹配换行符 (\n
) 或输入字符串的末尾。但是,它与回车/换行字符组合不匹配。要成功匹配它们,请使用子表达式\r?$
而不仅仅是$
.
So, use
@"^(#+).+?\r?$"
The .+?\r?$
将延迟匹配除 LF 之外的任何一个或多个字符,直到换行符之前的第一个 CR(可选)。
或者只使用否定字符类:
@"^(#+)[^\r\n]+"
The [^\r\n]+
将匹配除 CR/LF 之外的一个或多个字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)