a(.*?)d求解
.表示除了换行符,其它都能匹配,*表示0到多,那么在这里.*就表示a和d之间0到多个字母。?是懒惰模式,尽量少的匹配,那么就应该是取0个,应该什么都没有才对呀,为什么会显示bc呢
.表示除了换行符,其它都能匹配,*表示0到多,那么在这里.*就表示a和d之间0到多个字母。?是懒惰模式,尽量少的匹配,那么就应该是取0个,应该什么都没有才对呀,为什么会显示bc呢
2016-07-29
一般人认为?表示懒惰模式但是:
'/a(.*?)d/'是匹配了两个"内的内容,.表示匹配任意字符,*表示匹配0次以上,合在一起就是匹配全文字符串,但是因为前后有引号显示,所以匹配的是引号内的全文。而?则是表示非贪婪匹配,也就是碰到符合这个条件的立马就匹配,你可以把?取消掉试试就能立马看出差别了。推荐多去看看正则30分钟入门教程,绝对经典。
<?php
$subject = "my email is spark@imooc.com";
//在这里补充代码,实现正则匹配,并输出邮箱地址
$pattern = '/[\w\-]+@\w+\.\w+/';
preg_match($pattern, $subject, $matches);
echo $matches[0];
?>
解释一下'/[\w\-]+@\w+\.\w+/':判断是否为有效的Email格式.
^ 匹配一行的开头
\w 指数字英文加下划线
\.指一个字符"."
\- 指一个字符"-"
[\w\.\-] 指一个范围 即 数字、字母、下划线、字符"."、字符"-"
+ 量词 一个或多个
[\w\.\-]+ 指一个或多个[\w\.\-] 这样的字符,如 "aaa" "-ab" "c" "s._-l"
@ 指一个字符"@"
量词 一个或零个
* 量词 零个或多个
举报