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

时间:2017-02-22 07:15:30

标签: ruby regex devise rubular

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

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

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

enter image description here

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

foo
bar
baz

rubular正在向我提供barbaz匹配的反馈意见。

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

enter image description here

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

foo@foo.com
cats@cat.com

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

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

此外,值得一提的是字符串的开头和结尾与的开头和结尾不同。每个模式由下面显示的四种不同模式表示,并且在Regex quick reference

中以rubular表示
^   - Start of line
$   - End of line
\A  - Start of string
\z  - End of string

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

enter image description here