0

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

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

通常,当我学习正则表达式时,我会使用rubular。例如,如果我想了解正则表达式/.a./,我将设置我的工作区,如下所示

在此处输入图像描述

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

foo
bar
baz

rubular 给我的反馈是两者都bar匹配baz

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

在此处输入图像描述

没有比赛。这是因为我有两个例子:

foo@foo.com
cats@cat.com

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

4

1 回答 1

1

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

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

在此处输入图像描述

另外,值得一提的是,字符串的开头和结尾不同于的开头和结尾。每个都由如下所示的四种不同模式以及Regex 快速参考中的 rubular 表示:

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

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

在此处输入图像描述

于 2017-02-22T07:17:19.443 回答