看板 RegExp 關於我們 聯絡資訊
表達式:/<table[^>]*+>([^<]*+(?:(?!<\/?+table)<[^<]*+)*+)<\/table>/i 這段表達式在實際使用上是抓出來源字串內的所有<table>...</table> 我知道[^>]表達的是 不包含> 的所有字串, 但一直弄不清楚的是在[^>]後面的*+的作用 第一個問題:*是匹配<table[^>]還是匹配[^>], 如果是匹配[^>]是不是表示允許擁有零個 或多個 不包含> 的字串, 因為我一直在想既然是要抓出tabel, 匹配<table[^>]表示允許 零個又很怪 第二個問題:為什麼要在*號後面再加上+, *不是就允許零個或多個字串存在了嗎?為什麼 還要多一個允許一個或多個字串存在的+呢? 第三個問題:中間()的部分已經完全不能理解.,正常table裡頭會允許<thead>...</thead> <tr>...</tr>,<td>...</td>,<tfoot>...</tfoor>等tag的存在, 但是()中開始就用[^<] 拒絕 < 的存在, 希望有版友能替我解釋這一段... 抱歉, google跟在版上爬文了還是花煞煞, 不得已只好直接發文問了, 還請大家不吝嗇指 教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.111.59.235
s25g5d4:http://goo.gl/NRIfS *+ Match 0 or more times and give 11/01 00:27
s25g5d4:nothing back 11/01 00:27
give nothing back是指就算有抓到符合的字串也不返回任何的組的意思嗎?? ※ 編輯: DongFeng 來自: 114.33.9.244 (11/01 09:13)
LPH66:意思是如果對完了但後面不合的話, 不會退一格去試 11/01 13:14
LPH66:平常 * 的 match 動作會試遍所有 * 的組合後才回報找不到 11/01 13:14
LPH66:最先試的是抓最多的組合, 但如果這不對的話會少抓一個再試 11/01 13:16
LPH66:再不對再少一個, 一直到沒抓都不對就回報失敗 11/01 13:17
LPH66:*+ 的意思就是抓最多的組合失敗了就別試了 11/01 13:17
LPH66:對結果沒有影響, 但對 match 的效能有很大的影響 11/01 13:17
LPH66:特別是這裡已經指定了 [^>] 了那就沒必要退了 (一定不會對) 11/01 13:18
LPH66:那就乾脆叫它別去試不可能的組合 11/01 13:18
LPH66:呃說錯了, 這個例子對結果沒有影響 11/01 13:19
up9cloud:第一個問題:是批配[]裡的東西 11/01 13:21
up9cloud:因為<table>,<table border="1">都可能是目標 11/01 13:21
danny8376:對齁 會效能有影響呢www 難怪搞得這麼複雜XD 11/01 13:22
danny8376:用*+多了會誤吃</table的大麻煩 後方才拖了一大串... 11/01 13:23
godspeedlee:參考看看 11/13 10:24
godspeedlee:http://godspeedlee.byethost10.com/regex/ 11/13 10:24
godspeedlee:http://tinyurl.com/oe593xd 11/13 10:25