Preg_match解释

时间:2014-05-23 07:33:55

标签: php regex

我不确定这个代码试图做什么,请帮助我理解:

if(preg_match('#^.{1,5}@(gmail|yahoo|aol|hotmail|msn|ymail)#i',$email)) return false;

2 个答案:

答案 0 :(得分:0)

Regular expression visualization

Debuggex Demo

正则表达式尸检

#^.{1,5}@(gmail|yahoo|aol|hotmail|msn|ymail)#i
  • # - 这是分隔符 - 您在开始和结束时需要其中一个分隔符,并且它不必是#(它必须匹配在结束)。最常见的分隔符是正斜杠(/)(为什么我会到达i
  • ^ - 正则表达式的下一部分必须匹配字符串的开头 - 没有任何东西可以在它之前
  • .{1,5} - 任意字符(.)匹配1至5次
  • @ - 文字@字符
  • (gmail|yahoo|aol|hotmail|msn|ymail) - 文字字符串gmailyahooaolhotmailmsn或{{1} }
  • ymail - 结束分隔符
  • # - 这是一个“案例敏感”修饰符,这意味着我们还会匹配i / MSN / gMail

简而言之, 匹配

  

YAhoO我们在myemail@gmail.com标志之前有6个字符)
  @没有列出的域名

然而,它 匹配:

  

foo@bar.com
  12345@gmail.dk !"#¤%@MSN.COM是任意符号
  .
  a@hotmail.de因为我们与“雅虎”之后的内容不匹配

答案 1 :(得分:-1)

^断言字符串开头的位置
。{1,5}匹配任何字符(换行符除外) 量词:1至5次,尽可能多次,根据需要回馈[贪心]
@匹配字符@字面上 第一个捕获组(gmail | yahoo | aol | hotmail | msn | ymail)
第一种选择:gmail
gmail字面匹配字符gmail(不区分大小写) 第二种选择:雅虎
雅虎字面上匹配字符雅虎(不区分大小写) 第三种选择:aol
aol字面匹配字符aol(不区分大小写) 第四种选择:hotmail
hotmail按字面意思匹配字符hotmail(不区分大小写) 第五种选择:msn
msn字面匹配字符msn(不区分大小写) 第六种选择:ymail
ymail字面匹配字符ymail(不区分大小写) 我修饰语:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)