我试图匹配文件的某一端,其中"文件的某一端"可以超过多行.
我的正则表达式如下:
"\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,如果感兴趣的话.
问题是在最后一个换行符之前的$字符串末尾匹配(如果有的话).除非你使用,意思是相同的.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)
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |