为什么我无法在 rubular 上用这个正则表达式匹配多行?

Why am I not able to match multiple lines with this regex on rubular?

我正在使用以下正则表达式(取自 devise 生成的 devise.rb 文件):

\A[^@\s]+@[^@\s]+\z

通常,当我学习正则表达式时,我使用 rubular. For example, if I wanted to learn about the regex /.a./, I would set up my workspace as shown here:

注意我是如何使用多个示例的:

foo
bar
baz

rubular 给我的反馈是 barbaz 匹配。

现在我想了解设计生成的正则表达式:/\A[^@\s]+@[^@\s]+\z/。所以我设置了我的 rubular 工作区,如下所示 here:

没有匹配项。因为我有两个例子:

foo@foo.com
cats@cat.com

但我希望他们能匹配。为什么两个测试字符串都不匹配?

这是因为正则表达式 /\A[^@\s]+@[^@\s]+\z/ 匹配字符串的开头 \A 和字符串的结尾 \z.

如果您同时删除 \A\z 而尝试匹配 /[^@\s]+@[^@\s]+/ 那么它将匹配两个电子邮件地址,如图所示 here:

此外,值得一提的是 string 的开始和结束不同于 line 的开始和结束。每个都由下面显示的四种不同模式表示,并且在 Regex quick reference:

^   - Start of line
$   - End of line
\A  - Start of string
\z  - End of string

一个字符串中可以有多个;但是,单个字符串从 \A\z。因此,继续这个多电子邮件示例。用行模式的开始和结束替换字符串模式的开始和结束得到:/^[^@\s]+@[^@\s]+$/ 也将匹配,如下所示和 rubular: