使用php的curl根據關鍵詞爬取百度搜索結果頁


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

正則表達式匹配Html標簽

 

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

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

查找所有的TD:
<td.*(?=>)(.|\n)*?</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)(.|\n)*?</table>
說明:匹配最長的以 <table border="0" width="11%" class=" 開始, 以</table>結束的字符串,就是以上以紅色標示出來的

部分。

原理:
<table.*(?=headline)                  //參見記錄1的說明
(.|\n)                                             //指示在兩個或多個項之間進行選擇,(zlf)ood 與 "zood" 或 "food" 匹配
*?                                                //應與上一個 (.|\n) 聯合起來看,  .*? 就意味着匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復,懶惰模式。
</table>                                     //匹配的結束標記

注意:“(.|\n)”后面的 "*" 匹配 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>]+)[^>]*>(.|\n)*?</\k<tag>>
說明:匹配成對的HTML標簽,它將會匹配Html標簽及標簽中的內容,本例分三段匹配三個<table>標簽及</table>中的內容。
原理:
                                   //html標簽中的 <
(?<tag>[^\s>]+)            // (?<name>), 分組命名的方式,[^\s>]:非任何空白字符及“>”至少匹配一次
[^>]*>                            //非“>”匹配 0 到 n 次,及html的標簽“>”.
(.|\n)                              //在兩個或多個項之間時行選擇,(zlf)ood 與 "zood" 或 "food" 匹配.
*?                                  // 應與上一個(.|\n)聯合起來看, .*? 就意味着匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復,懶惰模式。
</\k<tag>>                    //反向引用命名的組,語法為 \k<name>, 及html 標簽“>”

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

正則表達匹配中文
匹配中文字符的正則表達式:   [\u4e00-\u9fa5]
1、先用js把中文轉換16進制碼:d.innerHTML = escape("你們"); 得到 %u4F60%u4EEC, 即 \u4F60\u4EEC

2、var arr = str.match(/\u4F60\u4EEC/g); 

3、\u4F60為單個漢字“你”.

4、以上測試程序為javascript


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM