上一篇內容寫了如何請求資源,那麼資源請求下載以後咱們就要對它就行解析了,解析以前咱們先熟悉一下正則表達式java
正則表達式在日常使用時仍是很普遍的,好比說表單輸入驗證,驗證手機號郵箱之類,Java的字符串匹配實現等都用到了正則,正則表達式的規則也不是不少,我簡單寫幾種,若是你想詳細的瞭解學習正則表達式,推薦閱讀正則表達式30分鐘入門教程,寫的很全面,講解的也很到位。web
我要寫的是使用過程
正則表達式
下面是一些經常使用的學習
元字符測試
\b 用於單詞的間隙處,\bhello\b表示匹配hello單詞spa
\d 匹配數字 0\d\d 表示匹配011,023,以0開頭三位數字,還能夠寫成0\d{2},0後面兩個數字.net
. 匹配換行符之外的全部字符code
* 它前面的字符能夠無限重複htm
\s 任意的空白符 ,好比空格,TAB對象
\w 字母或數字或下劃線或漢字等
+ 和*相似,可是+至少一次,*可能0此
^ 字符串開始
$ 字符串結束
{5,12} 長度限制在5到12之間
? 重複0到1次
[ ] 表示須要查找的內容,好比[aeiou]包含元音字母,[.?*]包含.?*的串
字符轉義
用 \ 來轉義元字符,好比要查找含*的串,\* == *
分支條件
| 表示或,兩個表達式鏈接 a|b,表示知足表達式a或者b
分組
()分組,能夠把多個匹配放到一塊,重複查找
反義
\W\S\D\B把小寫改爲大寫,[]裏的加^,好比[^aeiou]不是元音字母
註釋
(?#comment) 對錶達式進行註釋,好比 2\d[0-2](?#200-292) 表示200-292之間的數字
貪婪與懶惰
a.*b,它將會匹配最長的以a開始,以b結束的字符串。若是用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱爲貪婪匹配。
在 . * ? {n,m}等後面加?則表示儘量少的匹配,.? *? ?? {n,m}?
可能你看了上面仍是不知道在說什麼沒關係,下面寫了java的正則API以後會舉例說明
java.util.regex 包主要由三個類所組成:Pattern、Matcher 和 PatternSyntaxException。
Pattern 對象表示一個已編譯的正則表達式。Pattern 類沒有提供公共的構造方法。要構建一個模式,首先必須調用公共的靜態 compile 方法,它將返回一個 Pattern 對象。這個方法接受正則表達式做爲第一個參數。
Matcher 是一個靠着輸入的字符串來解析這個模式和完成匹配操做的對象。與 Pattern 類似,Matcher 也沒有定義公共的構造方法,須要經過調用 Pattern 對象的 matcher 方法來得到一個 Matcher 對象。
PatternSyntaxException 對象是一個未檢查異常,指示了正則表達式中的一個語法錯誤。
使用的流程能夠分爲下面幾個步驟
Pattern的compile靜態方法獲取pattern對象
pattern調用自身的matcher方法返回Matcher對象matcher
matcher對象經過find,matches,lookingAt等方法進行匹配
下面是個示例,要找到匹配ae,be,de,he之中的任意一個
package com.hldh.river.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by liuhj on 2016/1/5. * 本例用於測試JDK1.7 中的Matcher和Pattern * * 使用時主要是Pattern編譯正則,Matcher用來匹配字符串 */ public class AppTest { public static void main(String args[]){ String regexStr = "[abdh]e"; String targetStr = "hello world"; //獲取Pattern對象 Pattern pattern = Pattern.compile(regexStr); // 定義一個matcher用來作匹配 Matcher matcher = pattern.matcher(targetStr); if (matcher.find()) { System.out.println(matcher.group()); } } }
輸出結果
he
是否是很簡單,主要的難點仍是在正則表達式的掌握上,API很好理解
還有一個點我以爲須要說明一下,就是group,正則表達式裏有個分組的概念,好比說「^([abdh]e)(\d+)$」這裏面就是兩個分組,對應API裏的group(int group),參數裏是2的話就對應匹配(\d+),參數是1的話對應匹配([abdh]e),參數0是系統默認,表示匹配整個串。
使用group就能夠把匹配到的字符竄捕獲。
Matcher中find方法是匹配字符串中的一部分,matches匹配整個字符串,因此啊你看錶單驗證都是用的matches方法。