楼主:
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 <- 字串结束 全部匹配结束 匹配失败
主要差异在于一般状况会试着倒回去让后方能够匹配
而如果用+结尾的则不进行这个行为
: