亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 正則貪婪匹配的問題 [打印本頁]

作者: allen08pm    時(shí)間: 2014-02-07 17:54
標(biāo)題: 正則貪婪匹配的問題
本帖最后由 allen08pm 于 2014-02-07 17:55 編輯

echo "Copyright 2003 and guess what?" | sed -r 's/^.*([0-9]+)/\1/g'
運(yùn)行結(jié)果是 3 and guess what?   

為什么不是3

Any answer will be appreciated




作者: yestreenstars    時(shí)間: 2014-02-07 19:11
比較一下我這句和你的有什么差別:
  1. echo "Copyright 2003 and guess what?" | sed -r 's/^.*([0-9]+).*/\1/g'
復(fù)制代碼

作者: allen08pm    時(shí)間: 2014-02-08 09:16
回復(fù) 2# yestreenstars

這個(gè)前后兩個(gè)貪婪匹配  不怎么明白  大神能否解釋下


   
作者: laliheyi    時(shí)間: 2014-02-08 13:21
本帖最后由 laliheyi 于 2014-02-08 13:22 編輯

回復(fù) 1# allen08pm
  1. echo "Copyright 2003 and guess what?" | sed -r 's/^.*([0-9]+)/\1/g'
復(fù)制代碼
sed命令s替換匹配的字符 ^.*([0-9]+) 會(huì)匹配 "Copyright 2003 and guess what?"中的Copyright 2003(\1將為3)所以將之替換為3 ,與后面字符(and guess what?)組合結(jié)果就是所見到的3 and guess what?

   
作者: yestreenstars    時(shí)間: 2014-02-08 14:53
回復(fù) 3# allen08pm

Copyright 2003 and guess what?
黃色區(qū)域相當(dāng)于.*
紅色區(qū)域相當(dāng)于([0-9]+)
你只對(duì)黃色和紅色區(qū)域進(jìn)行處理,而沒對(duì)藍(lán)色區(qū)域進(jìn)行處理,所以最后的結(jié)果就是紅色區(qū)域+藍(lán)色區(qū)域,這樣說你能理解嗎?
   
作者: Herowinter    時(shí)間: 2014-02-08 16:16
回復(fù) 5# yestreenstars
樓主有疑問的應(yīng)該是對(duì)于這段文本 Copyright 2003 and guess what?
正則 .*([0-9]+).*
為什么前一個(gè).*匹配的是Copyright 200
后一個(gè).*匹配的是 and guess what?

如果不是貪婪匹配的話,
理論上也可以前一個(gè).*匹配Copyright
后一個(gè).*匹配003 and guess what?
等等


   
作者: laliheyi    時(shí)間: 2014-02-08 16:48
回復(fù) 6# Herowinter


    我的理解是 貪婪匹配盡可能多的匹配,從左到右進(jìn)行,第一個(gè).*貪婪匹配到Copyright 200,([0-9]+)匹配到3 ...
作者: rogantianwz    時(shí)間: 2014-02-08 16:48
無語了,這根本就不關(guān)乎什么“貪婪匹配”的事,2樓是正解
作者: jeffreyst    時(shí)間: 2014-02-09 11:32
學(xué)習(xí)了,呵呵!
作者: elu_ligao    時(shí)間: 2014-02-09 12:11
只匹配到最后一個(gè)數(shù)字之前的所有,最后一個(gè)數(shù)字之后的沒在你的匹配范圍內(nèi),后面加.*可以
作者: three_body    時(shí)間: 2014-02-21 13:16
"Copyright 2003 and guess what?" | sed -r 's/^.*([0-9]+)/\1/g'

整個(gè)的語法含義是\1標(biāo)簽的值替換^.*([0-9]+)匹配的值。所以這里看看^.*([0-9]+)匹配的文本內(nèi)容是Copyright 2003

\1標(biāo)簽的值是3,所以"Copyright 2003 and guess what?" 用3替換Copyright 2003后就是3 and guess what?。

同樣,正則變成^.*([0-9]+).*后,它匹配的文本內(nèi)容是Copyright 2003 and guess what?,用\1標(biāo)簽的值3替換Copyright 2003 and guess what?內(nèi)容后,就是3了。





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2