【发布时间】:2015-06-04 20:38:49
【问题描述】:
我不是 Ruby 程序员,但是当我阅读大量的 Ruby on Rails security guide 时,我注意到了这个部分:
Ruby 正则表达式的一个常见缺陷是用 ^ 和 $ 匹配字符串的开头和结尾,而不是 \A 和 \z。
有谁知道这只是美学问题还是其他问题?我问是因为我只使用了使用^ 和$ 的语言。
【问题讨论】:
标签: ruby-on-rails ruby regex
我不是 Ruby 程序员,但是当我阅读大量的 Ruby on Rails security guide 时,我注意到了这个部分:
Ruby 正则表达式的一个常见缺陷是用 ^ 和 $ 匹配字符串的开头和结尾,而不是 \A 和 \z。
有谁知道这只是美学问题还是其他问题?我问是因为我只使用了使用^ 和$ 的语言。
【问题讨论】:
标签: ruby-on-rails ruby regex
这不是 Ruby 特有的; \A 和 \Z 与 ^ 和 $ 不同。 ^ 和 $ 是 line 锚点的开始和结束,而 \A 和 \Z 是 string 锚点的开始和结束。
Ruby 与其他语言的不同之处在于,它自动使用“多行模式”(启用上述行为,即每行匹配 ^ 和 $)用于正则表达式,但在大多数其他风格中,您需要启用它您自己,这可能就是该文章包含警告的原因。
【讨论】:
\z 锚定在字符串的末尾,\Z 锚定在字符串的末尾或最后一个换行符之前,如果字符串以换行符结尾。因此,如果字符串以换行符结尾,\Z 锚定在最后一个换行符之前,\z 锚定在之后。