【手记】.net正则行尾匹配符$的问题

本来想用正则Split一下sql语句中简单场景的的GO,于是用^GO$(配合忽略大小写和多行模式),可居然连这种情况都搞不掂:

select 1
go
select 1

如果删掉$就能匹配了,但这显然不是办法,遂又在VS的C#交互窗口、RegexTester(.net写的)、chrome控制台等地方试,发现只有chrome能匹配,而只要是基于.net的工具都不能,我一度怀疑我.net环境出问题了,重启然并卵。后来在爆栈找到说法,参看:

https://*.com/questions/8618557/why-doesnt-in-net-multiline-regular-expressions-match-crlf

https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-options#multiline-mode

答案就是:.net的$不匹配\r,只匹配\n,严格说是只匹配到\n之前。问题win环境换行默认就是\r\n,所以要想匹配行尾,得写成\r?$才行。

- EOF -

上一篇:.NET 基础 一步步 一幕幕[面向对象之静态、非静态]


下一篇:CodeForces149D dfs实现区间dp