^ - Matches beginning of line
$ - Matches end of line
\A - Matches beginning of string.
\Z - Matches end of string. If string ends with a newline, it matches just before
前两名和后两名有什么区别?你什么时候使用一个而不是另一个?我没有看到它。
答案 0 :(得分:9)
您可以拥有一个多行字符串,其中\A
和\Z
变得重要:
s = "this\ntest"
# => "this\ntest"
s.match(/^this$/)
# => <MatchData "this">
s.match(/\Athis\Z/)
# => nil
有时候验证\A
和\Z
强制要求的用户数据。例如:
if (site.match(%r[^http://sitename.com/$]))
# ...
end
在这种情况下,可以围绕提供"http://sitename.com/\nhttp://evil.com/"
作为站点字符串来构建攻击。
答案 1 :(得分:2)
<强>更新强>
很抱歉没有习惯Ruby,但Ruby的正则表达式默认似乎有一个多行修饰符。因此,在我的下面的示例/描述中,无论是否使用修饰符,它们总是会有所不同。 Ruby中的m
修饰符只会改变.
与新行匹配的事实。
^
和\A
都使用相同的,除非使用m
多行修饰符。然后,^
将匹配每行的开头,而\A
将继续匹配整个字符串的开头。
同样适用于$
和\Z
。使用多行修饰符,$
将匹配每行的结尾,而\Z
将继续匹配整个字符串的结尾。
<强>示例:强>
我将使用重复的字符串abc
,其他字符表示匹配的位置,而不是字符串中的实际字符。
没有多行:
\A^abc
abc
abc$\Z
使用多行:
\A^abc$
^abc$
^abc$\Z