當使用Jsoup處理抓取網頁內容時,遇到要存取<script>...</script>
內的變數或資料時,我們可以利用Pattern與Matcher來作處理。
照例先上程式碼
var mString="<script>$(window).load(function(){ $('#if1').attr('src',\"https://url.TTT-testing.com/Demo/2_9auBB\"); });console.log(\"\");</script>"
val doc = Jsoup.parse(mString)
val searchScript = doc.select("script").first()
val p = Pattern.compile("https://[a-zA-Z0-9._/-]+")
val m = p.matcher(searchScript.toString())
while(m.find())
{
Log.d("Watching",m.group())
}
要使用Pattern與Matcher我們需要用到java.util.regex
Pattern
透過使用Pattern的靜態compile方法,通常搭配正規表示法來撰寫匹配的規則。
val p = Pattern.compile("https://[a-zA-Z0-9._/-]+")
像是上面的例子,當我們要去抓取https://url.TTT-testing.com/Demo/2_9auBB這類開頭固定的網址文字,在使用正規表示式時開頭就可以使用https://。
之後的網址內容,包含了英文大小寫、數字、.句號、_底線、/斜線以及-短折號,那麼我們在使用正規表示式時,就需要定義
最後我們規定了一個正規表示式為"https://[a-zA-Z0-9._/-]+"
備註 : 在[]後方我們多加了一個+號,表示[]內容會出現1到無限多次。
Matcher
規範好了正規表示式,就可以透過Matcher來檢查目標是否有符合我們條件的對象。
使用方法 val m = p.matcher(searchScript.toString())
篩選結果會回存到m.group()內。