作者DongFeng (Little Five)
看板RegExp
标题[问题] 一段表达式, 希望版友能帮忙解析...
时间Fri Nov 1 00:00:18 2013
表达式:/<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
2F:→ s25g5d4:nothing back 11/01 00:27
give nothing back是指就算有抓到符合的字串也不返回任何的组的意思吗??
※ 编辑: DongFeng 来自: 114.33.9.244 (11/01 09:13)
3F:推 LPH66:意思是如果对完了但後面不合的话, 不会退一格去试 11/01 13:14
4F:→ LPH66:平常 * 的 match 动作会试遍所有 * 的组合後才回报找不到 11/01 13:14
5F:→ LPH66:最先试的是抓最多的组合, 但如果这不对的话会少抓一个再试 11/01 13:16
6F:→ LPH66:再不对再少一个, 一直到没抓都不对就回报失败 11/01 13:17
7F:→ LPH66:*+ 的意思就是抓最多的组合失败了就别试了 11/01 13:17
8F:→ LPH66:对结果没有影响, 但对 match 的效能有很大的影响 11/01 13:17
9F:→ LPH66:特别是这里已经指定了 [^>] 了那就没必要退了 (一定不会对) 11/01 13:18
10F:→ LPH66:那就乾脆叫它别去试不可能的组合 11/01 13:18
11F:→ LPH66:呃说错了, 这个例子对结果没有影响 11/01 13:19
12F:→ up9cloud:第一个问题:是批配[]里的东西 11/01 13:21
13F:→ up9cloud:因为<table>,<table border="1">都可能是目标 11/01 13:21
14F:→ danny8376:对齁 会效能有影响呢www 难怪搞得这麽复杂XD 11/01 13:22
15F:→ danny8376:用*+多了会误吃</table的大麻烦 後方才拖了一大串... 11/01 13:23
16F:推 godspeedlee:参考看看 11/13 10:24