您现在的位置是:网站首页> 编程资料编程资料

编写高质量的js之正确理解正则表达式回溯_正则表达式_

2023-05-25 240人已围观

简介 编写高质量的js之正确理解正则表达式回溯_正则表达式_

当一个正则表达式扫描目标字符串时,从左到右逐个扫描正则表达式的组成部分,在每个位置上测试能不能找到一个匹配。对于每一个量词和分支,都必须确定如何继续进行。如果是一个量词(如*、+?或者{2,}),那么正则表达式必须确定何时尝试匹配更多的字符;如果遇到分支(通过|操作符),那么正则表达式必须从这些选项中选择一个进行尝试。

当正则表达式做出这样的决定时,如果有必要,它会记住另一个选项,以备返回后使用。如果所选方案匹配成功,正则表达式将继续扫描正则表达式模板,如果其余部分匹配也成功了,那么匹配就结束了。但是,如果所选择的方案未能发现相应匹配,或者后来的匹配也失败了,正则表达式将回溯到最后一个决策点,然后在剩余的选项中选择一个。继续这样,直到找到一个匹配,或者量词和分支选项的所有可能的排列组合都尝试失败后放弃这一过程,然后移动到此过程开始位置的下一个字符上,重复此过程。

例如,下面的代码演示了这一过程是如何通过回溯处理分支的。

 /h(ello|appy) hippo/.test("hello there, happy hippo");

上面一行正则表达式用于匹配“hello hippo”或“happy hippo”。测试一开始要查找一个h,目标字符串的第一个字母恰好就是h,立刻就找到了。接下来,子表达式(ello|appy)提供了两个处理选项。正则表达式选择最左边的选项(分支选择总是从左到右进行),检查ello 是否匹配字符串的下一个字符,确实匹配,然后正则表达式又匹配了后面的空格。

然而,在接下来的匹配中正则表达式“走进了死胡同”,因为hippo 中的h 不能匹配字符串中的下一个字母t。此时正则表达式还不能放弃,因为它还没有尝试过所有的选择,随后它回溯到最后一个检查点(在匹配了首字母h 之后的那个位置上)并尝试匹配第二个分支选项。但由于匹配没有成功,而且也没有更多的选项了,正则表达式认为从字符串的第一个字符开始匹配是不能成功的,因此它从第二个字符开始重新进行查找。正则表达式没有找到h,继续向后找,直到第14 个字母才找到,它匹配happy 的那个h。随后正则表达式再次进入分支过程,这次ello 未能匹配,但在回溯之后的第二次分支中,它匹配了整个字符串“happy hippo”,匹配成功了。

再如,下面代码演示了带重复量词的回溯。

 var str = "

Para 1.

" +"" +"

Para 2.

" +"
Div.
"; /

.*<\/p>/i.test(str);

正则表达式先匹配了字符串开始的3个字母

,然后是.*。点号表示匹配除换行符以外的任意字符,星号这个“贪婪”量词表示重复零次或多次,匹配尽量多的次数。因为目标字符串中没有换行符,正则表达式将匹配剩下的全部字符串!不过由于正则表达式模板中还有更多内容需要匹配,所以正则表达式尝试匹配<。由于在字符串末尾匹配不成功,因此每次回溯一个字符,继续尝试匹配<,直到正则表达式回到

标签的<位置。接下来尝试匹配\/(转义反斜杠),匹配成功,然后匹配p,匹配不成功。正则表达式继续回溯,重复此过程,直到第二段末尾时终于匹配了

。匹配返回成功需要从第一段头部一直扫描到最后一个的末尾,这可能不是我们想要的结果。

将正则表达式中的“贪婪”量词*改为“懒惰”(又名“非贪婪”)量词*?,以匹配单个段落。“懒惰”量词的回溯工作以相反方式进行。当正则表达式/

.*?<\/p>/推进到.*?时,首先尝试全部跳过,然后继续匹配<\/p>。

这样做是因为*?匹配零次或多次,尽可能少重复,尽可能少意味着可以重复零次。但是,当随后的<在字符串的这一点上匹配失败时,正则表达式回溯并尝试下一个最小的字符数:1个。正则表达式继续像这样向前回溯到第一段的末尾,在那里量词后面的<\/p>得到完全匹配。

如果目标字符串只有一个段落,那么此正则表达式的“贪婪”版本和“懒惰”版本是等价的,但尝试匹配的过程不同。

当一个正则表达式占用浏览器几秒甚至更长时间时,问题原因很可能是回溯失控。为说明此问题,给出下面的正则表达式,它的目标是匹配整个HTML文件。此表达式被拆分成多行是为了适合页面显示。与其他正则表达式不同,JavaScript在没有选项时可使点号匹配任意字符,包括换行符,所以此例中以[\s\S]匹配任意字符。

 /[\s\S]*?[\s\S]*?[\s\S]*?<\/title>[\s\S]*?<\/head> [\s\S]*?<body>[\s\S]*?<\/body>[\s\S]*?<\/html>/</pre></div><p>此正则表达式匹配在正常HTML 字符串时工作良好,但当目标字符串缺少一个或多个标签时,就会变得十分糟糕。例如</html>标签缺失,最后一个[\s\S]*?将扩展到字符串的末尾,因为在那里没有发现</html>标签,然后正则表达式将查看此前的[\s\S]*?队列记录的回溯位置,使它们进一步扩大。正则表达式尝试扩展倒数第二个[\s\S]*?—用它匹配</body>标签,就是此前匹配过正则表达式模板<\/body>的那个标签,然后继续查找第二个</body>标签,直到字符串的末尾。当所有这些步骤都失败时,倒数第三个[\s\S]*?将被扩展,直至字符串的末尾,依此类推。</p><p>此类问题的解决办法在于尽可能具体地指出分隔符之间的字符匹配形式,如模板“.*?”用于匹配双引号包围的一个字符串。用更具体的[^"\rn]*取代过于宽泛的.*?就去除了回溯时可能发生的几种情况,如尝试用点号匹配引号,或者扩展搜索超出预期范围。</p><p>在HTML 的例子中解决办法不是那么简单。不能使用否定字符类型,如用[^<]替代[\s\S],因为在搜索过程中可能会遇到其他类型的标签。但是,可以通过重复一个非捕获组来达到同样效果,它包含一个回溯(阻塞下一个所需的标签)和[\s\S](任意字符)元序列。这样可以确保中间位置上查找的每个标签都会失败。然后,更重要的是,[\s\S]模板在回溯过程中阻塞的标签在被发现之前不能被扩展。应用此方法后对正则表达式的最终修改如下:</p><div class="jb51code"><pre class="brush:js;"> /<html>(?:(?!<head>)[\s\S])*<head>(?:(?!<title>)[\s\S])*<title> (?:(?!<\/title>)[\s\S])*<\/title>(?:(?!<\/head>)[\s\S])*<\/head> (?:(?!<body>)[\s\S])*<body>(?:(?!<\/body>)[\s\S])*<\/body> (?:(?!<\/html>)[\s\S])*<\/html>/</pre></div><p>虽然这样做消除了潜在的回溯失控,并允许正则表达式在匹配不完整HTML字符串失败时的使用时间与文本长度呈线性关系,但是正则表达式的效率并没有提高。像这样为每个匹配字符进行多次前瞻,缺乏效率,而且成功匹配过程也相当慢。匹配较短字符串时使用此方法相当不错,而匹配一个HTML 文件可能需要前瞻并测试上千次。</p><div class="art_xg"><b>您可能感兴趣的文章:</b><ul><li><a href="/article/101390.htm" title="正则中的回溯定义与用法分析【JS与java实现】" target="_blank">正则中的回溯定义与用法分析【JS与java实现】</a></li><li><a href="/article/64585.htm" title="javascript递归回溯法解八皇后问题" target="_blank">javascript递归回溯法解八皇后问题</a></li><li><a href="/article/88716.htm" title="最佳的JavaScript错误处理实践" target="_blank">最佳的JavaScript错误处理实践</a></li><li><a href="/article/33344.htm" title="Javascript模块化编程(一)模块的写法最佳实践" target="_blank">Javascript模块化编程(一)模块的写法最佳实践</a></li><li><a href="/article/30111.htm" title="5个最佳的Javascript日期处理类库分享" target="_blank">5个最佳的Javascript日期处理类库分享</a></li><li><a href="/article/28736.htm" title="JS trim去空格的最佳实践" target="_blank">JS trim去空格的最佳实践</a></li><li><a href="/article/30279.htm" title="通过百度地图获取公交线路的站点坐标的js代码" target="_blank">通过百度地图获取公交线路的站点坐标的js代码</a></li><li><a href="/article/169803.htm" title="js回溯法计算最佳旅行线路代码实例" target="_blank">js回溯法计算最佳旅行线路代码实例</a></li></ul></div>
                <p class="share"><b>提示:</b>
                    本文由<b>神</b>整理自网络,如有侵权请联系本站删除!
                    <br/>
                    本站声明: <br/>
                    1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持; <br/>
                    2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
                </p>
                <p><span class="diggit"></span></p>
                <div class="nextinfo">
                                            <p>上一篇:<a href="/programinfo/?id=79862">js Abba逆向前瞻正则匹配实例_正则表达式_</a></p>
                                                                <p>下一篇:<a href="/programinfo/?id=79864">正则表达式{n,m}量词(至少n次,最多m次)_正则表达式_</a></p>
                                    </div>
            </div>
        </div>
        <div class="whitebg">
            <h2 class="htitle">相关内容</h2>
            <ul class="otherlink">
                                    <li><a href="/programinfo/?id=79862">js Abba逆向前瞻正则匹配实例_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79861">JS正则表达式验证数字(非常全)_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79860">JS基础系列之正则表达式_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79859">详解正则表达式之数字验证_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79858">EditPlus中的正则表达式 实战(1)_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79857">EditPlus中的正则表达式实战(5)_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79856">EditPlus中的正则表达式实战(6)_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79855">JavaScript正则表达式校验非零的正整数实例_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79854">JavaScript正则表达式校验非零的负整数实例_正则表达式_</a></li>
                                    <li><a href="/programinfo/?id=79853">JavaScript正则表达式校验非负整数实例_正则表达式_</a></li>
                            </ul>
        </div>
    </div>
    <div class="rbox">
        <div class="whitebg paihang">
            <h2 class="htitle">点击排行</h2>
            <ul>
                                    <li><i></i><a href="/programinfo/?id=1208905">唯唯绸否猜打一最佳正确生肖[最佳成语最佳释义解释答]</a></li>
                                    <li><i></i><a href="/programinfo/?id=154665">TYSB手游公测版下载-TYSB官方唯一正版手游下载 _安卓网</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208911">士绅名流代表是指什么生肖数字,成语释义解释落实</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208910">士绅名流代表什么生肖,成语释义解释落实</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208903">洗牌猫下载-洗牌猫(卡牌对战)Shuffle Cats v0.14.8_安卓网</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208902">丛林动物宝宝发型沙龙游戏-丛林动物宝宝发型沙龙(休闲装扮)Baby Jungle Animal Hair Salon v1.0.10_安卓网</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208909">士绅名流是指代表什么生肖、释义成语解释落实</a></li>
                                    <li><i></i><a href="/programinfo/?id=1208895">超人跑跑游戏下载-超人跑跑(横版动漫酷跑) v1.0.0_安卓网</a></li>
                            </ul>
        </div>
        <div class="whitebg tuijian">
            <h2 class="htitle">本栏推荐</h2>
            <ul>
                                    <li>
                        <a href="/programinfo/?id=436025">
                                                        <p>pandas获取对应的行或者列方式_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436024">
                                                            <i>
                                    <img src="//img.jbzj.com/file_images/article/202402/202402240855301.jpg" onerror="javascript:this.src='/static/images/1.jpg';">
                                </i>
                                                        <p>pandas如何获取某个数据的行号_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436023">
                                                            <i>
                                    <img src="//img.jbzj.com/file_images/article/202402/202402240916472.png" onerror="javascript:this.src='/static/images/1.jpg';">
                                </i>
                                                        <p>python进程池Pool中apply方法与apply_async方法的区别_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436022">
                                                        <p>python array中关于[a,b,c]的使用方式_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436021">
                                                            <i>
                                    <img src="//img.jbzj.com/file_images/article/202402/202402240929274.jpg" onerror="javascript:this.src='/static/images/1.jpg';">
                                </i>
                                                        <p>Python进程multiprocessing.Process()的使用解读_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436020">
                                                        <p>selenium常用API的使用过程记录(包括自动登录)_python_</p>
                        </a>
                    </li>
                                    <li>
                        <a href="/programinfo/?id=436019">
                                                        <p>Python使用multiprocessing如何实现多进程_python_</p>
                        </a>
                    </li>
                            </ul>
        </div>

        <div class="whitebg wenzi">
            <h2 class="htitle">猜你喜欢</h2>
            <ul>
                                    <li><a href="/programinfo/?id=436025">pandas获取对应的行或者列方式_python_</a></li>
                                    <li><a href="/programinfo/?id=436024">pandas如何获取某个数据的行号_python_</a></li>
                                    <li><a href="/programinfo/?id=436023">python进程池Pool中apply方法与apply_async方法的区别_python_</a></li>
                                    <li><a href="/programinfo/?id=436022">python array中关于[a,b,c]的使用方式_python_</a></li>
                                    <li><a href="/programinfo/?id=436021">Python进程multiprocessing.Process()的使用解读_python_</a></li>
                                    <li><a href="/programinfo/?id=436020">selenium常用API的使用过程记录(包括自动登录)_python_</a></li>
                                    <li><a href="/programinfo/?id=436019">Python使用multiprocessing如何实现多进程_python_</a></li>
                            </ul>
        </div>
    </div>
</article>
<footer>
    <div class="box">
        <div class="wxbox">
            <ul>

                <li><img src="/static/images/wx.png"><span>我的微信</span></li>
            </ul>
        </div>
        <div class="endnav">
            <p><b>关于我们</b></p>
            <p>神代码(http://mlft.cn
                )是IT资源下载与IT技能学习平台。js代码网收集整理了最新IT开发视频教程、网站模板、网站源码、js特效(插件)等,充分满足IT用户对不同类型资源的下载需求。代码网拒绝滥竽充数,我们只提供精品资源!
                <a data-ext-mark="custom-02"
                   href="http://wpa.qq.com/msgrd?v=3&uin=512953070&site=qq&menu=yes" rel="nofollow"
                   class="btn-contact custom-w" target="_blank" style="color: #448aff;">
                    站长QQ:512953070
                </a>
                本站会员:603
            </p>
            <p>© 技术支持:<a href="http://mlft.cn" title="神代码" target="_blank">神代码(http://mlft.cn)</a>

                                    <a href="http://blog.sixgod.net/programinfo/?id=79863" title="blog.sixgod.net" target="_blank">blog.sixgod.net</a>
                                    <a href="http://blog.haifeisi.net/programinfo/?id=79863" title="blog.haifeisi.net" target="_blank">blog.haifeisi.net</a>
                                    <a href="http://blog.flerken.cn/programinfo/?id=79863" title="blog.flerken.cn" target="_blank">blog.flerken.cn</a>
                                    <a href="http://blog.bieha.cn/programinfo/?id=79863" title="blog.bieha.cn" target="_blank">blog.bieha.cn</a>
                                    <a href="http://blog.miuti.cn/programinfo/?id=79863" title="blog.miuti.cn" target="_blank">blog.miuti.cn</a>
                                    <a href="http://blog.dk028.com/programinfo/?id=79863" title="blog.dk028.com" target="_blank">blog.dk028.com</a>
                                    <a href="http://blog.scflcp.cn/programinfo/?id=79863" title="blog.scflcp.cn" target="_blank">blog.scflcp.cn</a>
                                    <a href="http://blog.bzbl.cn/programinfo/?id=79863" title="blog.bzbl.cn" target="_blank">blog.bzbl.cn</a>
                                    <a href="http://blog.mlft.cn/programinfo/?id=79863" title="blog.mlft.cn" target="_blank">blog.mlft.cn</a>
                                    <a href="http://blog.7zz.net/programinfo/?id=79863" title="blog.7zz.net" target="_blank">blog.7zz.net</a>
                                    <a href="http://blog.liuyifei.net/programinfo/?id=79863" title="blog.liuyifei.net" target="_blank">blog.liuyifei.net</a>
                                    <a href="http://blog.58t.net/programinfo/?id=79863" title="blog.58t.net" target="_blank">blog.58t.net</a>
                                    <a href="http://blog.yamiao.net/programinfo/?id=79863" title="blog.yamiao.net" target="_blank">blog.yamiao.net</a>
                                    <a href="http://blog.caclrc.cn/programinfo/?id=79863" title="blog.caclrc.cn" target="_blank">blog.caclrc.cn</a>
                                    <a href="http://blog.rgbbs.cn/programinfo/?id=79863" title="blog.rgbbs.cn" target="_blank">blog.rgbbs.cn</a>
                                    <a href="http://blog.heiapp.net/programinfo/?id=79863" title="blog.heiapp.net" target="_blank">blog.heiapp.net</a>
                                    <a href="http://blog.zhfjx.cn/programinfo/?id=79863" title="blog.zhfjx.cn" target="_blank">blog.zhfjx.cn</a>
                                    <a href="http://blog.sshfy.cn/programinfo/?id=79863" title="blog.sshfy.cn" target="_blank">blog.sshfy.cn</a>
                                    <a href="http://blog.sxdgc.cn/programinfo/?id=79863" title="blog.sxdgc.cn" target="_blank">blog.sxdgc.cn</a>
                                    <a href="http://blog.28city.cn/programinfo/?id=79863" title="blog.28city.cn" target="_blank">blog.28city.cn</a>
                                    <a href="http://blog.etcb.cn/programinfo/?id=79863" title="blog.etcb.cn" target="_blank">blog.etcb.cn</a>
                                    <a href="http://blog.abdayah.cn/programinfo/?id=79863" title="blog.abdayah.cn" target="_blank">blog.abdayah.cn</a>
                                    <a href="http://blog.ddbdzs.cn/programinfo/?id=79863" title="blog.ddbdzs.cn" target="_blank">blog.ddbdzs.cn</a>
                                    <a href="http://blog.hyflex.cn/programinfo/?id=79863" title="blog.hyflex.cn" target="_blank">blog.hyflex.cn</a>
                                    <a href="http://blog.11855.cn/programinfo/?id=79863" title="blog.11855.cn" target="_blank">blog.11855.cn</a>
                                    <a href="http://blog.11566.cn/programinfo/?id=79863" title="blog.11566.cn" target="_blank">blog.11566.cn</a>
                                    <a href="http://blog.11355.cn/programinfo/?id=79863" title="blog.11355.cn" target="_blank">blog.11355.cn</a>
                                    <a href="http://blog.62622.cn/programinfo/?id=79863" title="blog.62622.cn" target="_blank">blog.62622.cn</a>
                                    <a href="http://blog.cbwq.cn/programinfo/?id=79863" title="blog.cbwq.cn" target="_blank">blog.cbwq.cn</a>
                                    <a href="http://blog.zrqm.cn/programinfo/?id=79863" title="blog.zrqm.cn" target="_blank">blog.zrqm.cn</a>
                                    <a href="http://blog.rlfm.cn/programinfo/?id=79863" title="blog.rlfm.cn" target="_blank">blog.rlfm.cn</a>
                                    <a href="http://blog.pbtb.cn/programinfo/?id=79863" title="blog.pbtb.cn" target="_blank">blog.pbtb.cn</a>
                                    <a href="http://blog.knlz.cn/programinfo/?id=79863" title="blog.knlz.cn" target="_blank">blog.knlz.cn</a>
                                    <a href="http://blog.rhwf.cn/programinfo/?id=79863" title="blog.rhwf.cn" target="_blank">blog.rhwf.cn</a>
                                    <a href="http://blog.dxfp.cn/programinfo/?id=79863" title="blog.dxfp.cn" target="_blank">blog.dxfp.cn</a>
                                    <a href="http://blog.rptb.cn/programinfo/?id=79863" title="blog.rptb.cn" target="_blank">blog.rptb.cn</a>
                                    <a href="http://blog.nzjg.cn/programinfo/?id=79863" title="blog.nzjg.cn" target="_blank">blog.nzjg.cn</a>
                                    <a href="http://blog.ygnl.cn/programinfo/?id=79863" title="blog.ygnl.cn" target="_blank">blog.ygnl.cn</a>
                                    <a href="http://blog.rxbg.cn/programinfo/?id=79863" title="blog.rxbg.cn" target="_blank">blog.rxbg.cn</a>
                                    <a href="http://blog.rfbc.cn/programinfo/?id=79863" title="blog.rfbc.cn" target="_blank">blog.rfbc.cn</a>
                                    <a href="http://blog.rwbs.cn/programinfo/?id=79863" title="blog.rwbs.cn" target="_blank">blog.rwbs.cn</a>
                                    <a href="http://blog.music.liuyifei.net/programinfo/?id=79863" title="blog.music.liuyifei.net" target="_blank">blog.music.liuyifei.net</a>
                                    <a href="http://blog.img.liuyifei.net/programinfo/?id=79863" title="blog.img.liuyifei.net" target="_blank">blog.img.liuyifei.net</a>
                                    <a href="http://blog.drnu.cn/programinfo/?id=79863" title="blog.drnu.cn" target="_blank">blog.drnu.cn</a>
                                    <a href="http://blog.wyim.cn/programinfo/?id=79863" title="blog.wyim.cn" target="_blank">blog.wyim.cn</a>
                                    <a href="http://blog.dvtg.cn/programinfo/?id=79863" title="blog.dvtg.cn" target="_blank">blog.dvtg.cn</a>
                                    <a href="http://blog.fvhc.cn/programinfo/?id=79863" title="blog.fvhc.cn" target="_blank">blog.fvhc.cn</a>
                                    <a href="http://blog.lble.cn/programinfo/?id=79863" title="blog.lble.cn" target="_blank">blog.lble.cn</a>
                                    <a href="http://blog.mvhu.cn/programinfo/?id=79863" title="blog.mvhu.cn" target="_blank">blog.mvhu.cn</a>
                                    <a href="http://blog.uesese.cn/programinfo/?id=79863" title="blog.uesese.cn" target="_blank">blog.uesese.cn</a>
                                    <a href="http://blog.ikuns.cc/programinfo/?id=79863" title="blog.ikuns.cc" target="_blank">blog.ikuns.cc</a>
                                    <a href="http://blog.02613.cn/programinfo/?id=79863" title="blog.02613.cn" target="_blank">blog.02613.cn</a>
                                    <a href="http://blog.lymzi.cn/programinfo/?id=79863" title="blog.lymzi.cn" target="_blank">blog.lymzi.cn</a>
                                    <a href="http://blog.ktoa.cn/programinfo/?id=79863" title="blog.ktoa.cn" target="_blank">blog.ktoa.cn</a>
                                    <a href="http://blog.73216.cn/programinfo/?id=79863" title="blog.73216.cn" target="_blank">blog.73216.cn</a>
                                    <a href="http://blog.crtwd.cn/programinfo/?id=79863" title="blog.crtwd.cn" target="_blank">blog.crtwd.cn</a>
                                    <a href="http://blog.szmdx.cn/programinfo/?id=79863" title="blog.szmdx.cn" target="_blank">blog.szmdx.cn</a>
                                    <a href="http://blog.kylkc.cn/programinfo/?id=79863" title="blog.kylkc.cn" target="_blank">blog.kylkc.cn</a>
                                    <a href="http://blog.dztmd.cn/programinfo/?id=79863" title="blog.dztmd.cn" target="_blank">blog.dztmd.cn</a>
                                    <a href="http://blog.pmhlw.cn/programinfo/?id=79863" title="blog.pmhlw.cn" target="_blank">blog.pmhlw.cn</a>
                                    <a href="http://blog.gfxtk.cn/programinfo/?id=79863" title="blog.gfxtk.cn" target="_blank">blog.gfxtk.cn</a>
                                    <a href="http://blog.tzpc.cn/programinfo/?id=79863" title="blog.tzpc.cn" target="_blank">blog.tzpc.cn</a>
                                    <a href="http://blog.jbqm.cn/programinfo/?id=79863" title="blog.jbqm.cn" target="_blank">blog.jbqm.cn</a>
                                    <a href="http://blog.sh3.cn/programinfo/?id=79863" title="blog.sh3.cn" target="_blank">blog.sh3.cn</a>
                                    <a href="http://blog.7sh.cn/programinfo/?id=79863" title="blog.7sh.cn" target="_blank">blog.7sh.cn</a>
                                    <a href="http://blog.95596.net/programinfo/?id=79863" title="blog.95596.net" target="_blank">blog.95596.net</a>
                                    <a href="http://blog.95540.net/programinfo/?id=79863" title="blog.95540.net" target="_blank">blog.95540.net</a>
                                    <a href="http://blog.12383.net/programinfo/?id=79863" title="blog.12383.net" target="_blank">blog.12383.net</a>
                                    <a href="http://blog.12363.net/programinfo/?id=79863" title="blog.12363.net" target="_blank">blog.12363.net</a>
                                    <a href="http://blog.boboji.net/programinfo/?id=79863" title="blog.boboji.net" target="_blank">blog.boboji.net</a>
                                    <a href="http://blog.r515.cn/programinfo/?id=79863" title="blog.r515.cn" target="_blank">blog.r515.cn</a>
                                    <a href="http://blog.g2050.cn/programinfo/?id=79863" title="blog.g2050.cn" target="_blank">blog.g2050.cn</a>
                                    <a href="http://blog.bbc888.com/programinfo/?id=79863" title="blog.bbc888.com" target="_blank">blog.bbc888.com</a>
                                    <a href="http://blog.ha123.net.cn/programinfo/?id=79863" title="blog.ha123.net.cn" target="_blank">blog.ha123.net.cn</a>
                                    <a href="http://blog.dindongji.com/programinfo/?id=79863" title="blog.dindongji.com" target="_blank">blog.dindongji.com</a>
                                    <a href="http://blog.dindongji.cn/programinfo/?id=79863" title="blog.dindongji.cn" target="_blank">blog.dindongji.cn</a>
                                    <a href="http://blog.dindongji.net/programinfo/?id=79863" title="blog.dindongji.net" target="_blank">blog.dindongji.net</a>
                                    <a href="http://blog.touyin.net/programinfo/?id=79863" title="blog.touyin.net" target="_blank">blog.touyin.net</a>
                                    <a href="http://blog.ludan.net/programinfo/?id=79863" title="blog.ludan.net" target="_blank">blog.ludan.net</a>
                                    <a href="http://blog.xshell.net/programinfo/?id=79863" title="blog.xshell.net" target="_blank">blog.xshell.net</a>
                                    <a href="http://blog.zdbcwf.com/programinfo/?id=79863" title="blog.zdbcwf.com" target="_blank">blog.zdbcwf.com</a>
                            </p>

        </div>
    </div>
    <a href="#">
        <div class="top"></div>
    </a></footer>
<style type="text/css">
    #zfbhb {
        background-color: aliceblue;
        width: 200px;
        position: fixed;
        left: 5px;
        bottom: 200px;
    }

    #zfbhb img {
        width: 200px;
    }

    #zfbhb1 {
        background-color: aliceblue;
        width: 150px;
        position: fixed;
        right: 5px;
        bottom: 40px;
    }

    #zfbhb1 img {
        width: 150px;
        margin-top: 10px;
        height: 80px;
    }

    @media  screen and (min-width: 1px) and (max-width: 1023px) {
        #zfbhb {
            width: 100px !important;
        }

        #zfbhb img {
            width: 100px;
        }

        #zfbhb1 {
            background-color: aliceblue;
            width: 80px;
            position: fixed;
            right: 5px;
            bottom: 30px;
        }

        #zfbhb1 img {
            width: 80px;
            margin-top: 10px;
            height: 30px;
        }
    }

</style>

<div id="zfbhb">
    <img src="/static/images/zfbhb.png" alt="">
</div>
<div id="zfbhb1">
    <a href="#" target="_blank">
        <img src="/static/images/ad.gif" alt="-六神源码网"/>
    </a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
            <a href="/xiaoshuoliebiao/0/1.html" target="_blank"><img src="http://img.liuyifei.net/uploads/20250405/90f7d443007aeac93ead6cbd5fec9cd6.jpg"
                                                      onerror="javascript:this.src='/static/images/ad.gif';"></a>
    </div>
<script src="/static/js/jquery-1.8.3.min.js"></script>
<script src="/static/js/comm.js"></script>
<!--[if lt IE 9]>
<script src="/static/js/modernizr.js"></script>
<![endif]-->
    <script src="/static/js/tongji.js"></script>
</body>
</html>