SingleLine Option的正则表达式问题和字符串结尾前的\n

Sta*_*eXV 2 .net c# regex

我试图匹配文件的某一端,其中"文件的某一端"可以超过多行.

我的正则表达式如下:

"\s\w$" 
Run Code Online (Sandbox Code Playgroud)

我想做的事情:查找所有以空白字符结尾的文件,然后在文件的最后添加"人类可读字符".

Regex.IsMatch("arbitrarytext a\n",@"\s\w$")
Run Code Online (Sandbox Code Playgroud)

问题是它是否匹配以下字符串:

"arbitrarytext a\n"
Run Code Online (Sandbox Code Playgroud)

我也尝试过RegexOptions.SingleLine - 虽然这只应该改变点"."的匹配行为.

如何重写我的正则表达式,它仍然满足我的需要,但与上面给出的例子不符.

其次,我也有兴趣解释为什么它与这个例子相符.

使用:.Net 3.5 SP1,如果感兴趣的话.

Tim*_*ker 6

问题是在最后一个换行符之前$字符串末尾匹配(如果有的话).除非你使用,意思是相同的.RegexOptions.Multiline$\Z

\z改为使用:

Regex.IsMatch("arbitrarytext a\n",@"\s\w\z")
Run Code Online (Sandbox Code Playgroud)

将失败.

另请参阅本教程有关锚点的信息,特别是"使用换行符结束字符串"一节.

简短概述:

Symbol  means...                                       if multiline mode is...
------------------------------------------------------------------------------
^       Start of string                                off (default*)   
^       Start of current line                          on               
\A      Start of string                                irrelevant       
$       End of string, before final newline, if any    off              
$       End of current line, before newline, if any    on               
\Z      End of string, before final newline, if any    irrelevant       
\z      End of string                                  irrelevant       

*: In Ruby, multiline mode is always on. Use \A or \Z to get ^ or $ behavior.
Run Code Online (Sandbox Code Playgroud)