詳解正規表示式

2021-08-21 14:38:12 字數 4282 閱讀 1497

c

字元c\0n   

八進位制0n代表的字元(0<=n<=7)

\0nn          

八進位制0nn代表的字元(0<=n<=7)

\0mnn

八進位制0mnn代表的字元(0<=m<=3,0<=n<=7)

\xnn     

十六進製制 0xnn所代表的字元

\uhhhh      

十六進製制 0xhhhh所代表的字元

\t製表符

\n換行符

\r回車符

\f換頁符

\a報警符

\e轉義符

\cc控制字元中出現的相應字元c

[c1c2. . .]

c1、c2……中的任何字元

[^c1c2. . .]

c1,c2....的補集

[ c1. . . &&c2 . . .]

c1...與c2...的交集

.任意字符集

\d 數字[0-9]

\d  

非數字[^0-9]

\s空白字元[\t\n\r\f\x0b]

\s    

非空白字元

\w       

單詞字元[a-za-z0-9_]

\w          

非單詞字元

\p     

乙個指定的字元類

\p         

指定字元類的補集^ 和

$輸入的開頭和結尾

\b   

單詞邊界

\b   

非單詞邊界

\a    

輸入的開頭

\z              

輸入的結尾

\z除最後行終止符之外的輸入結尾

\g     

上個匹配的結尾

x? x可能出現,也可能不出現

x*       

x,可以重複0次或多次

x+    

x,可以重複1次或多次

x x x      

x重複n次,至少重複n次,重複n到m次

xy x的匹配後面跟著y的匹配

x|y       

x或y的匹配

(xy)

匹配xy並且在乙個自動計數的分組中捕獲它

\n    

與第n個分組的匹配

//建立匹配模式

pattern pattern = pattern.compile("\\d[a-z](ab)|(cd)");

//獲取匹配器

matcher matcher = pattern.matcher("a3aaab");

//判斷是否存在匹配

boolean matched = matcher.matches();

//判斷是否為起始匹配模式

boolean lookingat = matcher.lookingat();

//獲取下乙個匹配,存在則為true

boolean b = matcher.find();

//獲取當前得到的匹配

string group = matcher.group();

//獲取當前匹配首位的索引

int start = matcher.start();

//獲取當前匹配末位的索引

int end = matcher.end();

//獲取正則中分組數

int i = matcher.groupcount();

//得到指定序號的匹配

string group1 = matcher.group(0);

//對獲取的匹配進行替換,並返回

string replaceall = matcher.replaceall("mm");

貪婪(預設)匹配:量詞不加字尾,x+指定正則的第乙個字元或字元類占用與它匹配的輸出字串的最大子字串,如果下乙個字元或字元類無法匹配成功,則在上一字元或字元類匹配成功的基礎上從末尾退乙個字元,直至下乙個字元或字元類與剩餘字串匹配成功。

強制匹配:量詞加加字尾?,x+?

將輸入的第乙個字元與指定正則的第乙個字元或字元類匹配,如果不滿足,則追加下乙個字元,直到匹配成功,剩餘的字串與下乙個字元或字元類強制匹配。

侵占(占用)匹配:量詞加加字尾?,x+?

指定正則的第乙個字元或字元類占用與它匹配的輸出字串的最大子字串,如果下乙個字元或字元類無法匹配成功,滿足上一字元或字元類匹配的字串不會退字元。

public static void main(string args) 

system.out.println("開始強制匹配》");

while (m2.find())

system.out.println("開始侵占匹配》");

1 數字:^[0-9]*$

2 n位的數字:^\d$

3 至少n位的數字:^\d$

4 m-n位的數字:^\d$

5 零和非零開頭的數字:^(0|[1-9][0-9]*)$

6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9])?$

7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d)?$

8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$

9 有兩位小數的正實數:^[0-9]+(.[0-9])?$

10 有1~3位小數的正實數:^[0-9]+(.[0-9])?$

11 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*)$ 或 ^\+?[1-9][0-9]*$

12 非零的負整數:^\-[1-9]0-9"*$ 或 ^-[1-9]\d*$

13 非負整數:^\d+$ 或 ^[1-9]\d*|0$

14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

18 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

19 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

1 漢字:^[\u4e00-\u9fa5]$

2 英文和數字:^[a-za-z0-9]+$ 或 ^[a-za-z0-9]$

3 長度為3-20的所有字元:^.$

4 由26個英文本母組成的字串:^[a-za-z]+$

5 由26個大寫英文本母組成的字串:^[a-z]+$

6 由26個小寫英文本母組成的字串:^[a-z]+$

7 由數字和26個英文本母組成的字串:^[a-za-z0-9]+$

8 由數字、26個英文本母或者下劃線組成的字串:^\w+$ 或 ^\w$

9 中文、英文、數字包括下劃線:^[\u4e00-\u9fa5a-za-z0-9_]+$

10 中文、英文、數字但不包括下劃線等符號:^[\u4e00-\u9fa5a-za-z0-9]+$ 或 ^[\u4e00-\u9fa5a-za-z0-9]$

11 可以輸入含有^%&',;=?$\"等字元:[^%&',;=?$\x22]+

12 禁止輸入含有~的字元:[^~\x22]+

25、車牌號:([京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊使領a-z][a-z](([0-9][df])|" + "([df]([a-hj-np-z0-9])[0-9])))|([京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊使領a-z][a-z][a-hj-np-z0-9][a-hj-np-z0-9掛學警港澳])

正規表示式詳解

正規表示式 基本正規表示式主要用於grep,egrep,vi,sed,awk命令中進行字串匹配。符號 意義 c 匹配字母c 匹配任意單個字元 匹配前乙個字元出現零次或多次 匹配任意多個任意字元 匹配集合中的任意單個字元,括號中為乙個集合 x y 匹配連續的字串範圍 匹配字串的開頭 匹配字串的結尾 匹...

正規表示式詳解

正規表示式主要作用 分割 匹配 查詢 替換 正規表示式中包括的元素 1.原子 普通字元 a z a z 0 9 原子表 轉義字元 2.元字元 有特殊功能的字元 3.修正模式符 系統內建部分字元,例如 i m s u 原子 1.a z a z 0 9 最常見的字元 2.abc 用圓括號包含起來的單元符...

正規表示式詳解

正規表示式 regular expression 又稱正規表示式 規則表示式等,是電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列匹配某個句法規則的字串,也通常用來檢索 替換那些匹配某個模式的文字。下面從以下方面開始講述正規表示式在python中的應用。1.在python中使用,首先需要...