我使用以下正则表达式(取自devise生成的devise.rb
文件):
\A[^@\s]+@[^@\s]+\z
通常,当我学习正则表达式时,我会使用rubular。例如,如果我想了解正则表达式/.a./
,我会按照here所示设置我的工作区:
请注意我如何使用多个示例:
foo
bar
baz
rubular正在向我提供bar
和baz
匹配的反馈意见。
现在我想了解设计生成的正则表达式:/\A[^@\s]+@[^@\s]+\z/
。所以我设置了我的rubular工作区,如here所示:
没有匹配。这是因为我有两个例子:
foo@foo.com
cats@cat.com
但我期待他们两个都匹配。为什么两个测试字符串都不匹配?
答案 0 :(得分:1)
这是因为正则表达式/\A[^@\s]+@[^@\s]+\z/
将字符串的开头与\A
匹配,字符串的结尾与\z
匹配。
如果同时删除了\A
和\z
,而是尝试匹配/[^@\s]+@[^@\s]+/
,那么它将匹配两个电子邮件地址here:
此外,值得一提的是字符串的开头和结尾与行的开头和结尾不同。每个模式由下面显示的四种不同模式表示,并且在Regex quick reference:
中以rubular表示^ - Start of line
$ - End of line
\A - Start of string
\z - End of string
字符串中可以有多个行;但是,单个字符串从\A
转到\z
。所以继续这个多个电子邮件的例子。使用行模式的开头和结尾替换字符串模式的开头和结尾:/^[^@\s]+@[^@\s]+$/
也将匹配,如下所示和rubular: