正則表達式庫的簡單介紹
正則表達式易于使用,功能強大,可用于復雜的搜索和替換以及基于模板的文本檢查。這對于輸入形式的用戶輸入驗證特別有用-驗證電子郵件地址等。您還可以從網頁或文檔中提取電話號碼,郵政編碼等,在日志文件中搜索復雜的模式,然后您就可以想象得到。無需重新編譯程序即可更改規則(模板)。
分析貓眼電影數據
https://www.maoyan.com/board/4?offset=0
有10部電影
https://www.maoyan.com/board/4?offset=10
又有10部電影,以此類圖+10
分析其中一部電影的網頁源碼:
<dd><i class="board-index board-index-2">2</i><a href="/films/1297" title="肖申克的救贖" class="image-link" data-act="boarditem-click" data-val="{movieId:1297}"><img src="//s3.meituan.net/static-prod01/com.sankuai.movie.fe.mywww-files/image/loading_2.e3d934bf.png" alt="" class="poster-default" /><img data-src="https://p0.pipi.cn/mmdb/fb7386020fa51b0fafcf3e2e3a0bbe694d17d.jpg?imageView2/1/w/160/h/220" alt="肖申克的救贖" class="board-img" /></a><div class="board-item-main"><div class="board-item-content"><div class="movie-item-info"><p class="name"><a href="/films/1297" title="肖申克的救贖" data-act="boarditem-click" data-val="{movieId:1297}">肖申克的救贖</a></p><p class="star">主演:蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓</p>
<p class="releasetime">上映時間:1994-09-10(加拿大)</p> </div><div class="movie-item-number score-num">
<p class="score"><i class="integer">9.</i><i class="fraction">5</i></p> </div></div></div>
</dd>
構造正則表達式:
<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>
提取數據保存
function ExtractMovies(const AInputString: string; ATemplate: string): string;
constMovieRE = '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>';
varr : TRegExpr;OutputString: string;
beginResult := '';r := TRegExpr.Create;tryr.Expression := MovieRE;if r.Exec(AInputString) thenrepeatResult := Result + Format('{''image'':''%1s'',''actor'':''%2s'',''score'':''%3s'',''index'':''%4s'',''tit1e'':''%5s'',''time'':''%6s''}',[r.Match[2], Trim(r.Match[4]), r.Match[6] + r.Match[7], Trim(r.Match[1]), r.Match[3], r.Match[5]]) + sLineBreak;until not r.ExecNext;finallyr.Free;end;
end;
返回數據: