正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成乙個「規則字串」,這個「規則字串」用來表達對字串的一種過濾邏輯。
給定乙個正規表示式和另乙個字串,我們可以達到如下的目的:
1. 給定的字串是否符合正規表示式的過濾邏輯(稱作「匹配」);
2. 可以通過正規表示式,從字串中獲取我們想要的特定部分。
正規表示式的特點是:
1. 靈活性、邏輯性和功能性非常的強;
2. 可以迅速地用極簡單的方式達到字串的複雜控制。
3. 對於剛接觸的人來說,比較晦澀難懂。
由於正規表示式主要應用物件是文字,因此它在各種文字編輯器場合都有應用,小到著名編輯器editplus,大到microsoft word、visual studio等大型編輯器,都可以使用正規表示式來處理文字內容。
. ^$
四個字元是所有語言都支援的正規表示式,所以這四個是基礎的正規表示式。正則難理解因為裡面有乙個等價的概念,這個概念大大增加了理解難度,讓很多初學者看起來會懵,如果把等價都恢復成原始寫法,自己書寫正則就超級簡單了,就像說話一樣去寫你的正則了:
等價:
等價是等同於的意思,表示同樣的功能,用不同符號來書寫。
?,*,+,\d,\w 都是等價字元
?等價於匹配長度
*等價於匹配長度
+等價於匹配長度
\d等價於[0-9]
\d等價於[^0-9]
\w等價於[a-za-z_0-9]
\w等價於[^a-za-z_0-9]。
常用運算子與表示式:
^ 開始
() 域段
包含,預設是乙個字元長度
[^] 不包含,預設是乙個字元長度
匹配長度
. 任何單個字元(\. 字元點)
| 或\ 轉義
$ 結尾
[a-z] 26個大寫字母
[a-z] 26個小寫字母
[0-9] 0至9數字
[a-za-z0-9] 26個大寫字母、26個小寫字母和0至9數字
, 分割
分割語法:
[a,h,t,w] 包含a或h或t或w字母
[a,h,t,w] 包含a或h或t或w字母
[0,3,6,8] 包含0或3或6或8數字
語法與釋義:
基礎語法 "^({})({})({})$"
正則字串 = "開始([包含內容])([包含內容])([包含內容])結束"
?,*,+,\d,\w 這些都是簡寫的,完全可以用和{}代替,在(?:)(?=)(?!)(?<=)(?
例項:
字串;tel:086-0666-88810009999
原始正則:"^tel:[0-9]-[0][0-9]-[0-9]$"
速記理解:開始 "tel:普通文字"[0-9數字]"-普通文字"[0數字][0-9數字]"-普通文字"[0-9數字] 結束"
等價簡寫後正則寫法:"^tel:\d-[0]\d-\d$" ,簡寫語法不是所有語言都支援
android 使用方法
string format = "[\\u4e00-\\u9fa5_a-za-z0-9_]";string name = mname.gettext().tostring().trim();
boolean matches = pattern.matches(format, name); // 通過為true 驗證不通過為false
正規表示式例項應用
1.驗證使用者名稱和密碼:("^[a-za-z]\w$")正確格式:"[a-z][a-z]_[0-9]"組成,並且第乙個字必須為字母6~16位;
驗證中英文、字母、數字_ : "[\\u4e00-\\u9fa5_a-za-z0-9_]"
2.驗證**號碼:("^(\d-)\d$")正確格式:***/***x-******x/******xx;
3.驗證手機號碼:"[1][34578]\d";
4.驗證身份證號(15位或18位數字):"\\d|\d[0-9xx]";
6.只能輸入由數字和26個英文本母組成的字串:("^[a-za-z0-9]+$");
7.整數或者小數:^[0-9]+([.][0-9]+)$
8.只能輸入數字:"^[0-9]*$"。
9.只能輸入n位的數字:"^\d$"。
10.只能輸入至少n位的數字:"^\d$"。
11.只能輸入m~n位的數字:"^\d$"。
12.只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
13.只能輸入有兩位小數的正實數:"^[0-9]+(\.[0-9])?$"。
14.只能輸入有1~3位小數的正實數:"^[0-9]+(\.[0-9])?$"。
15.只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。
16.只能輸入非零的負整數:"^\-[1-9][0-9]*$"。
17.只能輸入長度為3的字元:"^.$"。
18.只能輸入由26個英文本母組成的字串:"^[a-za-z]+$"。
19.只能輸入由26個大寫英文本母組成的字串:"^[a-z]+$"。
20.只能輸入由26個小寫英文本母組成的字串:"^[a-z]+$"。
21.驗證是否含有^%&',;=?$\"等字元:"[%&',;=?$\\^]+"。
22.只能輸入漢字:"^[\u4e00-\u9fa5]$"。
23.驗證url:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
24.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"10"~"12"。
25.驗證乙個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"、"10"~"29"和「30」~「31」。
26.獲取日期正規表示式:\\d[年|\-|\.]\d[月|\-|\.]\d日?
評注:可用來匹配大多數年月日資訊。
27.匹配雙位元組
字元(包括漢字在內):[^\x00-\xff]
評注:可以用來計算字串的長度(乙個雙位元組字元長度計2,ascii字元計1)
28.匹配空白行的正規表示式:\n\s*\r
評注:可以用來刪除空白行
29.匹配html標記的正規表示式:<(\s*?)[^>]*>.*?|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力
30.匹配首尾空白字元的正規表示式:^\s*|\s*$
評注:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式
評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求
32.匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$
評注:表單驗證時很實用
當正規表示式和字串函式都能解決問題時,一定要使用字串函式,這樣不容易出錯,最重要的是字串函式比正規表示式實現效能上要好得多。
Android之正規表示式
給定乙個正規表示式和另乙個字串,我們可以達到如下的目的 1.給定的字串是否符合正規表示式的過濾邏輯 稱作 匹配 2.可以通過正規表示式,從字串中獲取我們想要的特定部分。正規表示式的特點是 1.靈活性 邏輯性和功能性非常的強 2.可以迅速地用極簡單的方式達到字串的複雜控制。3.對於剛接觸的人來說,比較...
Android 正規表示式
publicclassregexutil a za z0 9 證件號碼 pattern publicstaticfinalpatternid code pattern pattern compile a za z0 9 編碼pattern publicstaticfinalpatterncode p...
android常用正規表示式
在日常開發中,經常要驗證ip,號碼,url等是否正確,今天給大家推薦乙個android 實用類,直接copy到專案就能立即使用 public class regularutils 驗證手機號 現在手機號碼水太深,來個短小粗暴點了只能 private static final string regex...