单行选项和字符串结束前的 的正则表达式问题

本文关键字:正则表达式 问题 结束 选项 字符串 单行 | 更新日期: 2023-09-27 18:17:51

我正在尝试匹配文件的特定结尾,其中"文件的特定结尾"可以跨越多行。

我的正则表达式如下:

"'s'w$" 

我想做的:找到所有以空格字符结尾的文件,后面跟着一个"人类可读的字符"在文件的最后。

Regex.IsMatch("arbitrarytext a'n",@"'s'w$")

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

"arbitrarytext a'n"

我也尝试了RegexOptions。单行-虽然这应该只改变点"。"的匹配行为。

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

其次,我也对为什么它与示例完全匹配的解释感兴趣。

单行选项和字符串结束前的
的正则表达式问题

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

问题是$匹配字符串最后换行字符(如果有的话)之前的末尾。除非您使用RegexOptions.Multiline,否则$的含义与'Z相同。

'z代替:

Regex.IsMatch("arbitrarytext a'n",@"'s'w'z")

将会失败。

请参阅关于锚的教程,特别是"以换行结束的字符串"一节。

简短概述:

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.