Android之正規表示式

2021-07-30 11:14:05 字數 3781 閱讀 3088

正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成乙個「規則字串」,這個「規則字串」用來表達對字串的一種過濾邏輯。

給定乙個正規表示式和另乙個字串,我們可以達到如下的目的:

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...