行15應給予注意.首先,注意gsub!也是一個破壞函數.它通過替換所有符合 re 模式字符來修改 str(sub指替換,首字母 g 指全局, 比如,替換所有的匹配而不只是第一個匹配).到此為止,還好;但我們用什么來替代文本中的匹配部分呢? 在行1和行2里的 st 和 en 被分別定義為表示反轉文本顏色(color-inverted)和恢復正常文本顏色的ANSI碼. 在行15,它們被#{}括起以確保他們被前面定義的那樣解釋(這樣我們才沒看見變量名被打印出來).在這中間是 "\\".這是個小把戲.因為替換字符串是由雙引號引起的,一對反斜杠會被解釋為一個單一的反斜杠;所以 gsub!實際上得到的是"\",就一段特殊代碼正好就是表示"任何與模式于第一處匹配的字符".因此新的字符串在被打印出來的時候,很像原來的那個,只不過匹配的部分以反視(inverse video)的方式高亮度顯示出來.