a(.*?)d求解
.表示除了換行符,其它都能匹配,*表示0到多,那么在這里.*就表示a和d之間0到多個(gè)字母。?是懶惰模式,盡量少的匹配,那么就應(yīng)該是取0個(gè),應(yīng)該什么都沒(méi)有才對(duì)呀,為什么會(huì)顯示bc呢
.表示除了換行符,其它都能匹配,*表示0到多,那么在這里.*就表示a和d之間0到多個(gè)字母。?是懶惰模式,盡量少的匹配,那么就應(yīng)該是取0個(gè),應(yīng)該什么都沒(méi)有才對(duì)呀,為什么會(huì)顯示bc呢
2016-07-29
舉報(bào)
2022-03-26
我的也是怎么解決???直接使用快捷鍵提示就好了?免得自己拼寫錯(cuò)誤。
2016-11-22
.*? 是盡可能的少, 但不是說(shuō)直接為0,是在匹配到的前提下,盡可能的少取。
這道題是有abcd這個(gè)情況的,所以取這個(gè)。
再比如 ?原來(lái)的$str = 'abcdaaaad’ ? ?這個(gè)的話 ?如果是貪婪 就會(huì)取到'abcdaaaad' ?非貪婪(懶惰)就會(huì)取到'abcd'而不是 ? 空。
否則還用正則表達(dá)式干嘛? 直接默認(rèn)為空就行了,還多一種 懶惰模式?jīng)]有意義。
2016-08-06
????? 一般人認(rèn)為?表示懶惰模式但是:
???? '/a(.*?)d/'是匹配了兩個(gè)"內(nèi)的內(nèi)容,.表示匹配任意字符,*表示匹配0次以上,合在一起就是匹配全文字符串,但是因?yàn)榍昂笥幸?hào)顯示,所以匹配的是引號(hào)內(nèi)的全文。而?則是表示非貪婪匹配,也就是碰到符合這個(gè)條件的立馬就匹配,你可以把?取消掉試試就能立馬看出差別了。推薦多去看看正則30分鐘入門教程,絕對(duì)經(jīng)典。
<?php
$subject = "my email is spark@imooc.com";
//在這里補(bǔ)充代碼,實(shí)現(xiàn)正則匹配,并輸出郵箱地址
$pattern = '/[\w\-]+@\w+\.\w+/';
preg_match($pattern, $subject, $matches);
echo $matches[0];
?>
解釋一下'/[\w\-]+@\w+\.\w+/':判斷是否為有效的Email格式.
^ 匹配一行的開(kāi)頭
\w 指數(shù)字英文加下劃線
\.指一個(gè)字符"."
\- 指一個(gè)字符"-"
[\w\.\-] 指一個(gè)范圍 即 數(shù)字、字母、下劃線、字符"."、字符"-"
+ 量詞 一個(gè)或多個(gè)
[\w\.\-]+ 指一個(gè)或多個(gè)[\w\.\-] 這樣的字符,如 "aaa" "-ab" "c" "s._-l"
@ 指一個(gè)字符"@"
量詞 一個(gè)或零個(gè)
* 量詞 零個(gè)或多個(gè)
2016-07-29
*?????? 重復(fù)任意次,但盡可能少重復(fù)
+??????? 重復(fù)1次或更多次,但盡可能少重復(fù)
???????? 重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}???????? 重復(fù)n到m次,但盡可能少重復(fù)
{n,}????? 重復(fù)n次以上,但盡可能少重復(fù)
所以并不是取0個(gè),,舉個(gè)例子
a.*?b匹配最短的,以a開(kāi)始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab和ab