天天看點

正則

1.字元比對範圍

a:精确比對單個字元

x|y:允許出現的2個字元

[xyz]:字元集合,允許出現集合内任意單個字元

[a-z] [a-z] [0-9]:字元範圍

[^xyz] [^0-9]:集合内字元不允許出現

2.元字元

\d :比對任意單個數字

\d :比對\d規則之外的任意單個字元

\w :比對任意單個字母數字下劃線

\w :比對\w之外的任意單個字元

\s :比對單個空格

\n :比對單個換行符

\. :特殊字元 隻比對.

. :比對任意單個字元(換行符除外)

3.多次重複比對

a{3} :精準3次比對

a{3,} :最少出現3次

\d{3,5} :約定出現最少次數與最大次數

\d* :可以出現零次至無限次,相當于{0,}

\d+ :最少出現一次,相當于{1,}

\d? :最多出現一次,相當于{0,1}

4.定位比對

^a.* :頭比對 以a開頭

.*a$ :未比對 以a結尾

^a.*a$:全字比對 以a開頭并且以a結尾

5.貪婪模式

在滿足條件的情況下盡可能多的比對

例如:112233112 正則:\d{6,8} 結果就是:11223311

6.非貪婪模式

在滿足條件的情況下盡可能少比對

例如:112233112 正則:\d{6,8}? 結果就是:112233

7.表達式分組

将正規表達式 分組為多個子表達式

例如:12345678或者123456 正則:(^\d{4}$)|(^\d{8}$)

備注:

在javascript中,正規表達式:/^[\u4e00-\u9fa5]{2,8}$/ 前後需要添加/

例如比對人姓名:

var regex1=/^[\u4e00-\u9fa5]{2,8}$/;

var name="李四";

regex1.test(name);//傳回值為true:比對上 false:未比對到

在java中,比對正規表達式:

pattern p = pattern.compile("([\\u4e00-\\u9fa5]{2,10})([a-za-z]{10,20})");//其中比對中文的\u4e00前面需要在添加\

macther m = p.matcher("張三zhangsan");

m.find();//傳回true有比對到 false沒有比對到

如果比對到多個使用循環擷取

while(m.find()){

  m.group(0); //表示符合表達式所有的資訊:張三zhangsan,

  m.group(1); //表示符合分組第一部分的漢字([\\u4e00-\\u9fa5]{2,10}):張三

  m.group(2); //表示符合分組第二部分的英文([a-za-z]{10,20}):zhangsan

}

繼續閱讀