zoukankan      html  css  js  c++  java
  • 使用php的curl根据关键词爬取百度搜索结果页

    http://bbs.csdn.net/wap/topics/390938327

    正则表达式匹配Html标签

     

    查找所有的TD区域(最短):
    <tds*.*>s*.*</td>

    查找所有的TR:
    <tr.*(?=>)(.| )*?</tr>

    查找所有的TD:
    <td.*(?=>)(.| )*?</td>

    正则表达式匹配Html标签

    例1.
    以下是一段Html代码
    <table boder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <table border="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <table boder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表过式:<table.*(?=headline)
    说明:正则表达式匹配表格开始标记,能够返回开始标记直至 “headline”之间的所有内容(换行除外);
    就是以上红色标示出来的部分。
    原理:
    <table                           //匹配的开始部分
    .*                                   //除换行外的所有字符
    (?=headline)               //零宽度正预测先行断言,匹配以 headline 结尾的单词的前面部分(除了 headline 以外的部分)


    例2.
    <table boder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <table border="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <table boder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表达式:<table.*(?=headline)(.| )*?</table>
    说明:匹配最长的以 <table border="0" width="11%" class=" 开始, 以</table>结束的字符串,就是以上以红色标示出来的

    部分。

    原理:
    <table.*(?=headline)                  //参见记录1的说明
    (.| )                                             //指示在两个或多个项之间进行选择,(zlf)ood 与 "zood" 或 "food" 匹配
    *?                                                //应与上一个 (.| ) 联合起来看,  .*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复,懒惰模式。
    </table>                                     //匹配的结束标记

    注意:“(.| )”后面的 "*" 匹配 0 个到多个任意字符,而“?”使得“*”匹配范围最小化,即在找到表达式的下一部分之前匹配尽可能少的字符。</table> 是表格的结束标记.

    例3.
    <tableboder="0" width="11%" class="somestory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>
    <tableborder="0" width="11%" class="headline">
    <tr>
    <td width="100%">
    <p align="center">典经HTML正则表达式!</p>
    </td>
    </tr>
    </table>
    <tableboder="0" width="11%" class="someotherstory">
    <tr>
    <td width="100%">
    <p align="center">其它内容...</p>
    </td>
    </tr>
    </table>

    正则表达式:<(?<tag>[^s>]+)[^>]*>(.| )*?</k<tag>>
    说明:匹配成对的HTML标签,它将会匹配Html标签及标签中的内容,本例分三段匹配三个<table>标签及</table>中的内容。
    原理:
                                       //html标签中的 <
    (?<tag>[^s>]+)            // (?<name>), 分组命名的方式,[^s>]:非任何空白字符及“>”至少匹配一次
    [^>]*>                            //非“>”匹配 0 到 n 次,及html的标签“>”.
    (.| )                              //在两个或多个项之间时行选择,(zlf)ood 与 "zood" 或 "food" 匹配.
    *?                                  // 应与上一个(.| )联合起来看, .*? 就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复,懒惰模式。
    </k<tag>>                    //反向引用命名的组,语法为 k<name>, 及html 标签“>”

    注意:“(.| )”后面的 "*" 匹配 0 个到多个任意字符,而“?”使得“*”匹配范围最小化,即在找到表达式的下一部分之前匹配尽可能少的字符。
    本例使用了分组命名及反向引用命名组的概念。

    正则表达匹配中文
    匹配中文字符的正则表达式:   [u4e00-u9fa5]
    1、先用js把中文转换16进制码:d.innerHTML = escape("你们"); 得到 %u4F60%u4EEC, 即 u4F60u4EEC

    2、var arr = str.match(/u4F60u4EEC/g); 

    3、u4F60为单个汉字“你”.

    4、以上测试程序为javascript

  • 相关阅读:
    My.NET.ClassLibrary.Note.1
    DesignPattern.Ch12.Facade.Node
    DesignPattern.Ch10.Template Method.Note
    Oracle.sql.Note
    C#.Static Field And Static Constructor.Autocriticism
    DesignPattern.Ch4.Open Closed Principle.Note
    关于n!被整除的问题【算法实现】
    令人费解的编译错误:error C2144: syntax error : 'double' should be preceded by ';' 和 error C3646: ';' : unknown override specifier
    诡异难解决的错误:Windows已在xxx.exe中触发一个断点
    Linux(Ubuntu10.04 )下libxml2的安装以及使用示例
  • 原文地址:https://www.cnblogs.com/as3lib/p/6834055.html
Copyright © 2011-2022 走看看