.正則表達式 |
[]spa |
^code |
$對象 |
四個字符是全部語言都支持的正則表達式,因此這個四個是基礎的正則表達式。正則難理解由於裏面有一個等價的概念,這個概念大大增長了理解難度,讓不少初學者看起來會蒙,若是把等價都恢復成原始寫法,本身書寫正則就超級簡單了,就像說話同樣去寫你的正則了:ci
等價:字符串
等價是等同於的意思,表示一樣的功能,用不一樣符號來書寫。table
?,*,+,\d,\w 都是等價字符基礎
?等價於匹配長度{0,1} *等價於匹配長度{0,} +等價於匹配長度{1,} \d等價於[0-9] \D等價於[^0-9] \w等價於[A-Za-z_0-9] \W等價於[^A-Za-z_0-9]。 \b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」。 \B匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。 \s匹配任何不可見字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。 \S匹配任何可見字符。等價於[^ \f\n\r\t\v]。
經常使用運算符與表達式:語法
^ 開始 () 域段 [] 包含,默認是一個字符長度 [^] 不包含,默認是一個字符長度 {n,m} 匹配長度 . 任何單個字符(除去\r\n,要匹配包括\r\n之內的如何字符請使用[\s\S]) | 或 \ 轉義 $ 結尾 [A-Z] 26個大寫字母 [a-z] 26個小寫字母 [0-9] 0至9數字 [A-Za-z0-9] 26個大寫字母、26個小寫字母和0至9數字 , 分割
分類 | 代碼/語法 | 說明 |
---|---|---|
捕獲 | (exp) | 匹配exp,並捕獲文本到自動命名的組裏 |
(?<name>exp) | 匹配exp,並捕獲文本到名稱爲name的組裏,也能夠寫成(?'name'exp) | |
(?:exp) | 匹配exp,不捕獲匹配的文本,也不給此分組分配組號 | |
零寬斷言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp後面的位置 | |
(?!exp) | 匹配後面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
註釋 | (?#comment) | 這種類型的分組不對正則表達式的處理產生任何影響,用於提供註釋讓人閱讀 |
Java代碼示例: Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.pattern();//返回p 也就是返回該Matcher對象是由哪一個Pattern對象的建立的
Matcher.matches()/ Matcher.lookingAt()/ Matcher.find() 方法
Matcher類提供三個匹配操做方法,三個方法均返回boolean類型,當匹配到時返回true,沒匹配到則返回false
matches()對整個字符串進行匹配,只有整個字符串都匹配了才返回true
Java代碼示例: Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.matches();//返回false,由於bb不能被\d+匹配,致使整個字符串匹配未成功. Matcher m2=p.matcher("2223"); m2.matches();//返回true,由於\d+匹配到了整個字符串
lookingAt()對前面的字符串進行匹配,只有匹配到的字符串在最前面才返回true
Java代碼示例: Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.lookingAt();//返回true,由於\d+匹配到了前面的22 Matcher m2=p.matcher("aa2223"); m2.lookingAt();//返回false,由於\d+不能匹配前面的aa
find()對字符串進行匹配,匹配到的字符串能夠在任何位置.
Java代碼示例: Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); m.find();//返回true Matcher m2=p.matcher("aa2223"); m2.find();//返回true Matcher m3=p.matcher("aa2223bb"); m3.find();//返回true Matcher m4=p.matcher("aabb"); m4.find();//返回false