Hei*_*nzi 37 .net c# regex line-breaks
我注意到以下几点:
var b1 = Regex.IsMatch("Line1\nLine2", "Line1$", RegexOptions.Multiline); // true
var b2 = Regex.IsMatch("Line1\r\nLine2", "Line1$", RegexOptions.Multiline); // false
Run Code Online (Sandbox Code Playgroud)
我糊涂了.RegexOptions的文档说:
多线:多线模式.更改^和$的含义,使它们分别在任何行的开头和结尾匹配,而不仅仅是整个字符串的开头和结尾.
由于C#和VB.NET主要用于Windows世界,我猜大多数.NET应用程序处理的文件都使用CRLF换行符(\r\n)而不是LF换行符(\n).但是,似乎.NET正则表达式解析器无法将CRLF换行符识别为行尾.
我知道我可以解决这个问题,例如,通过匹配Line1\r?$,但它仍然让我感到奇怪.这真的是.NET regexp解析器的预期行为还是我错过了一些隐藏UseWindowsLinebreaks选项?
Kev*_*sse 50
来自MSDN:
默认情况下,$仅匹配输入字符串的结尾.如果指定RegexOptions.Multiline选项,则它匹配换行符(\n)或输入字符串的结尾.但是,它与回车符/换行符字符组合不匹配.要成功匹配它们,请使用子表达式\ r?$而不是$.
http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#Multiline
所以我不能说为什么(与其他语言的正则表达式的兼容性?),但至少它是有意的.
| 归档时间: |
|
| 查看次数: |
5461 次 |
| 最近记录: |