单行选项和字符串结束前的 的正则表达式问题
本文关键字:正则表达式 问题 结束 选项 字符串 单行 | 更新日期: 2023-09-27 18:17:51
我正在尝试匹配文件的特定结尾,其中"文件的特定结尾"可以跨越多行。
我的正则表达式如下:
"'s'w$"
我想做的:找到所有以空格字符结尾的文件,后面跟着一个"人类可读的字符"在文件的最后。
Regex.IsMatch("arbitrarytext a'n",@"'s'w$")
问题是它也匹配以下字符串:
"arbitrarytext a'n"
我也尝试了RegexOptions。单行-虽然这应该只改变点"。"的匹配行为。
我如何重写我的正则表达式,它仍然满足我的需要,但不匹配上面给出的例子。
其次,我也对为什么它与示例完全匹配的解释感兴趣。
问题是$
匹配字符串在最后换行字符(如果有的话)之前的末尾。除非您使用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.