为什么Ruby的正则表达式使用\ A和\ z而不是^和$?

tre*_*ace 29 ruby regex ruby-on-rails

我不是Ruby程序员,但在阅读广泛的Ruby on Rails安全指南时,我注意到了这一部分:

Ruby正则表达式中常见的缺陷是将字符串的开头和结尾与^和$匹配,而不是\ A和\ z.

有谁知道这只是美学问题还是其他问题?我问,因为我只使用了使用^和的语言$.

Dan*_*uis 51

这不是Ruby特有的; \A并且\Z是不一样的东西^$.^并且$是开始和结束线锚,而\A\Z是开始和结束字符串锚.

Ruby与其他语言的不同之处在于它自动使用"多行模式"(这使得前面提到的每行的匹配^$匹配行为)用于正则表达式,但是在大多数其他版本中你需要自己启用它,这可能是该文章包含的原因警告.

参考:http://www.regular-expressions.info/anchors.html

  • @treeface:他们是不同的.`\ z`锚定在字符串的末尾,`\ Z`锚定在字符串的末尾或最后一个换行符之前,如果字符串以换行符结尾.因此,如果字符串以换行符结尾,则`\ Z`锚定在最后一个换行符之前,而`\ z`锚定之后. (23认同)