Re: [問題] 一段表達式, 希望版友能幫忙解析...

作者: danny8376 (釣到一隻猴子@_@)   2013-11-05 02:45:03
※ 引述《DongFeng (Little Five)》之銘言:
: 謝謝各位前輩的回答, 前陣子比較忙沒有時間上來回覆感謝各位
: 特別謝謝danny8376前輩, 謝謝您那麼用心回答還特地回信到我信箱>///<
: 經過danny前輩分階段的講解我已經知道這行表達式是怎麼運作的了
: 白話的說來就是匹配
: <table此處可為非>的任意字串(含空白與無)>
: 匹配非<(一般來說是空白或無)
: 匹配非<table、非</table的任意tag(一般來說是<thead/><tbody/><tr/><td/></tfoot/>)
: </table>
: 這整段可以找出頁面中所有不含table的table
: 但對於*+的部分我還是有點疑惑, 我自己的解讀是[^>]*+是匹配非>的任意字串後再以該
: 字串作一次以上的驗證,也就是說
: <table c>
: <table cl>
: <table cla>
: <table clas>
: <table class>
: <table class=>
: <table class=">
: ......
: <table class="test">
: 因為任意字元的關係所以匹配到c就停止並回傳成功, 不知道這樣解讀對不對
RegExp是不會提前回傳成功的
RegExp的行為上必須整段表達式全跑完亦或字串結束還不成功才會結束匹配
抓 <table...> 的部分其實 *+ 跟 + 沒太大差異
不過後面就比較有差異了 這段表達式主要是為了效率而寫成這樣
*+跟+的差異的話 拿/ab*b/和/ab*+b/來匹配abbbb差異就很明顯了
(也比較好說明XD)
/ab*b/ => ab*b
\/ 開始匹配
a
ab
abb
abbb
abbbb <- 找不到 b* => backtrack
abbb <- b* 匹配結束 往下繼續
abbbb <- 找到b 全部匹配結束 匹配成功
/ab*+b/ => ab*+b
\/ 開始匹配
a
ab
abb
abbb
abbbb <- 找不到 b*+ 匹配結束 往下繼續
abbbb <- 字串結束 全部匹配結束 匹配失敗
主要差異在於一般狀況會試著倒回去讓後方能夠匹配
而如果用+結尾的則不進行這個行為
:
作者: s25g5d4 (function(){})()   2012-01-05 02:46:00
他不是問*+嗎? 以這個例子來說我覺得用*或*+在效能上也是沒差耶..
作者: danny8376 (釣到一隻猴子@_@)   2012-01-05 09:28:00
啊... 半夜頭腦不清 打錯了XDD確實我也覺得沒太大差異... 不過總比後面用*?好多吧XD
作者: DeathWatch (愛情模糊理論)   2012-01-05 23:41:00

Links booklink

Contact Us: admin [ a t ] ucptt.com