ruby中的\z与\Z区别

 1 s = "this is\nthe name\n"
 2 puts "--------------"
 3 puts s.match(/name\Z/)
 4 puts s.match(/name\z/)
 5 puts "--------------"
 6 
 7 s = "this is\nthe name"
 8 puts "--------------"
 9 puts s.match(/name\Z/)
10 puts s.match(/name\z/)
11 puts "--------------"
1 --------------
2 name
3 
4 --------------
5 --------------
6 name
7 name
8 --------------

官方文档是

  • \Z - Matches end of string. If string ends with a newline, it matches just before newline

  • \z - Matches end of string

我的理解是\Z和\z都是匹配字符串的结尾,但是如果字符串结尾多了一个\n,那么\Z匹配时忽略这个\n,匹配\n前面的内容是否与给定的正则匹配,而\z不能忽略,所以\z会失败,如上面例子