Regex(轉載)

來源:互聯網
上載者:User

標籤:

1、Regex的知識要點

1、Regex是什嗎?

Regex是一種可以用於模式比對和替換的強有力的工具。

2、Regex的優點?

更少的代碼,更高的效率。

3、Regex如何使用?

在下面的教程中我們將學習到Regex的用法。

4、Regex的缺點?

需要花一定的時間學習,這個時間由個人決定,一天或者更久一些。

2、Regex的各種符號及其含義

常用的符號 . 表示任意一個字元

\s 空白字元(空格鍵, tab, 換行, 換頁, 斷行符號) 

\S 非空白字元([^\s])

\d 一個數字,(相當於[0-9]  )

\D  一個非數位字元,(相當於[^0-9] )

\w 一個單詞字元(word character) (相當於 [a-zA-Z_0-9] )

\W 一個非單詞的字元,[^\w]

^ 一行的開始

$ 一行的結尾

\b 一個單詞的邊界 

\B 一個非單詞的邊界

\G 前一個匹配的結束

[] 匹配方括弧內的一個字元

例如:[abc] 表示字元a,b,c中的任意一個(與a|b|c相同)

[a-zA-Z] 表示從a到z或A到Z當中的任意一個字元

表示次數的符號 * 重複零次或更多次

例如:a* 匹配零個或者多個a

+ 重複一次或更多次

例如:a+ 匹配一個或者多個a

? 重複零次或一次

例如:a? 匹配零個或一個a

{n} 重複n次

例如:a{4} 匹配4個a

{n,} 重複n次或更多次

例如:a{4,} 匹配至少4個a

{n,m} 重複n到m次

例如:a{4,10} 匹配4~10個a

 

2JAVARegex執行個體教程                                                         12/11/2008

3、Regex執行個體

javaRegex通過java.util.regex包下的Pattern類與Matcher類實現:

1、首先引入java包:java.util.regex

2、使用方法如下:

共分三步:

①構造一個模式.

Pattern p=Pattern.compile("[a-z]*");

②建造一個匹配器

Matcher m = p.matcher(str);

③進行判斷,得到結果

boolean b = m.matches();

Matcher類提供三個匹配操作方法,三個方法均返回boolean類型,當匹配到

時返回true,沒匹配到則返回false

①m.matches()

matches()對整個字串進行匹配,只有整個字串都匹配了才返回true

②m.lookingAt()

lookingAt()對前面的字串進行匹配,只有匹配到的字串在最前面才返

回true

③m.find() 

find()對字串進行匹配,匹配到的字串可以在任何位置

Matcher類的其他方法

int groupcount() 返回此匹配器模式中的擷取的群組數。

String replaceAll(String replacement) 用給定的replacement全部替代匹配的

部分

String repalceFirst(String replacement) 用給定的replacement 替代第一次匹

配的部分

appendReplacement(StringBuffer sb,String replacement)  根 據 模 式 用

replacement替換相應內容,並將匹配的結果添加到sb當前位置之後

StringBuffer appendTail(StringBuffer sb) 將輸入序列中匹配之後的末尾字串

添加到sb當前位置之後.

group(n) 0代表永遠都是匹配整個運算式的字串的那部分 n<>0時代表

第n組匹配的部分

①字元匹配

    Pattern p = Pattern.compile(expression); // Regex

    Matcher m = p.matcher(str); // 操作的字串

    boolean b = m.matches(); //返回是否匹配的結果

    System.out.println(b);

    Pattern p = Pattern.compile(expression); // Regex

3JAVARegex執行個體教程                                                         12/11/2008

    Matcher m = p.matcher(str); // 操作的字串

    boolean b = m. lookingAt (); //返回是否匹配的結果

    System.out.println(b);

    Pattern p = Pattern.compile(expression); // Regex

    Matcher m = p.matcher(str); // 操作的字串

    boolean b = m..find (); //返回是否匹配的結果

    System.out.println(b);

②分割字串

Pattern pattern = Pattern.compile(expression); //Regex 

String[] strs = pattern.split(str); //操作字串 得到返回的字串數組

③替換字串

    Pattern p = Pattern.compile(expression); // Regex

    Matcher m = p.matcher(text); // 操作的字串

    String s = m.replaceAll(str); //替換後的字串

④尋找替換指定字串

Pattern p = Pattern.compile(expression); // Regex

    Matcher m = p.matcher(text); // 操作的字串

    StringBuffer sb = new StringBuffer(); 

    int i = 0;

    while (m.find()) {

     m.appendReplacement(sb, str);

     i++;    //字串出現次數

    }

    m.appendTail(sb);//從截取點將後面的字串接上

String s = sb.toString();

⑤尋找輸出字串

Pattern p = Pattern.compile(expression); // Regex

    Matcher m = p.matcher(text); // 操作的字串

    while (m.find()) {

 //m.start() 返回匹配到的子字串在字串中的索引位置.  

 //m.end()返回匹配到的子字串的最後一個字元在字串中的索引位置.  

 //m.group()返回匹配到的子字串  

}

4JAVARegex執行個體教程                                                         12/11/2008

3、下面通過幾個例子來理解一下Regex的妙用

3.1 匹配字串(matches()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示首字母是a,中間是任一字元,結尾以b結束

    //不匹配的結果

    p = Pattern.compile("a*b");    

m = p.matcher("baaaaab");    

b = m.matches();    

    System.out.println("匹配結果:"+b); //輸出:true 

 

    //匹配的結果

    p = Pattern.compile("a*b");    

m = p.matcher("aaaaab");    

b = m.matches();    

    System.out.println("匹配結果:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

5JAVARegex執行個體教程                                                         12/11/2008

3.2 判斷手機號碼(matches()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示第一位是1,第二位為3或5,結尾為9位元字的一串數字

    p = Pattern.compile("^[1][3,5]+\\d{9}");    

m = p.matcher("13812345678");    

b = m.matches();    

    System.out.println("手機號碼正確:"+b); //輸出:true 

 

    //

    p = Pattern.compile("[1][3,5]+\\d{9}");    

m = p.matcher("03812345678");//錯誤  首位為0

//m = p.matcher("13812345-7a");//錯誤  字串中有字母或者字元

b = m.matches();    

    System.out.println("手機號碼錯誤:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

6JAVARegex執行個體教程                                                         12/11/2008

3.3 社會安全號碼碼驗證

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示15位或者18位元字的一串數字

    p = Pattern.compile("\\d{15}|\\d{18}");    

m = p.matcher("120101198506020080");    

b = m.matches();    

    System.out.println("社會安全號碼碼正確:"+b); //輸出:true 

 

    //

    p = Pattern.compile("\\d{15}|\\d{18}");    

m = p.matcher("020101198506020080");//錯誤  首位為0

b = m.matches();    

    System.out.println("社會安全號碼碼錯誤:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

7JAVARegex執行個體教程                                                         12/11/2008

3.4 email驗證

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示郵箱號碼

    p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*");    

m = p.matcher("[email protected]");    

b = m.matches();    

    System.out.println("email號碼正確:"+b); //輸出:true 

 

    //

    p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*");    

m = p.matcher("user.test.com");//錯誤  @應為.

b = m.matches();    

    System.out.println("email號碼錯誤:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

8JAVARegex執行個體教程                                                         12/11/2008

3.5 IP地址檢查

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示郵箱號碼

    p = 

Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");    

m = p.matcher("192.168.1.1");    

b = m.matches();    

    System.out.println("IP正確:"+b); //輸出:true 

 

    //

    p = 

Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");    

m = p.matcher("192.168.1.1234");//錯誤  應該為3位不應該是4位

b = m.matches();    

    System.out.println("IP錯誤:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

9JAVARegex執行個體教程                                                         12/11/2008

3.6 中文名

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest{

static void test(){

Pattern p = null; //Regex      

    Matcher m = null; //操作的字串  

    boolean b = false;

    //Regex表示漢字的一串字串

    p = Pattern.compile("^[\u4e00-\u9fa5]+$");    

m = p.matcher("貂禪");    

b = m.matches();    

    System.out.println("中文名正確:"+b); //輸出:true 

 

    //

    p = Pattern.compile("^[\u4e00-\u9fa5]+$");    

m = p.matcher("nick");//錯誤  只能是中文

b = m.matches();    

    System.out.println("中文名錯誤:"+b); //輸出:false 

}

public static void main(String argus[]){

test();

}

}

10JAVARegex執行個體教程                                                         12/11/2008

3.7 字串匹配的返回

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

/**

 * start()返回匹配到的子字串在字串中的索引位置.  

 * end()返回匹配到的子字串的最後一個字元在字串中的索引位置.  

 * group()返回匹配到的子字串  

 */

Pattern p=Pattern.compile("\\d+");  

Matcher m=p.matcher("aaa2223bb11222");  

while(m.find()){

System.out.println(m.start());//第一個迴圈返回3,第二個迴圈返回

9  

System.out.println(m.end());//返回7,第二個迴圈返回14

System.out.println(m.group());//返回2233,第二個返回11222

}

  }

public static void main(String argus[]) {

test();

}

}

11JAVARegex執行個體教程                                                         12/11/2008

3.8 groupCount、group()、group(n)的用法

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

/*

 * 本例groupCount將返回三組a11bbb、11、bbb 

 */

Pattern p=Pattern.compile("\\w(\\d\\d)(\\w+)"); 

Matcher m=p.matcher("aa11bbb");

        if(m.find()){    

            int count = m.groupCount(); //返回匹配組的數目,而不是匹配字串

的數目 

            for(int i = 0; i <= count; i++)    

                System.out.println("group " + i + " :" + m.group(i)); 

        }    

  }

/*

 * 返回結果如下

 * group 0 :a11bbb

 * group 1 :11

 * group 2 :bbb

 */

public static void main(String argus[]) {

test();

}

}

12JAVARegex執行個體教程                                                         12/11/2008

3.9 分割字串(split ()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p=Pattern.compile("\\d+"); //將所含數字去掉

String str[] = p.split("aa11bbb33cc55gg");

   for (int i = 0; i < str.length; i++) {

    System.out.println(str[i]);

}

  }

/*

 * 返回結果如下

 * aa

 * bbb

 * cc

 * gg

 */

public static void main(String argus[]) {

test();

}

}

13JAVARegex執行個體教程                                                         12/11/2008

3.10 字串替換(replaceAll()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p = Pattern.compile("\\d+"); //將所含數字全部替換為XX

Matcher m = p.matcher("aa11bbb33cc55gg");

String str = m.replaceAll("XX");

System.out.println(str);

  }

/*

 * 返回結果如下

 * aaXXbbbXXccXXgg

 */

public static void main(String argus[]) {

test();

}

}

14JAVARegex執行個體教程                                                         12/11/2008

3.11 字串替換2(appendReplacement()方法及appendTail()方法)

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegTest {

static void test() {

Pattern p = Pattern.compile("55");

Matcher m = p.matcher("aa11bbb33cc55gg55yy");

StringBuffer sb = new StringBuffer();

while (m.find()) {

m.appendReplacement(sb, "@@");//用@@替換所有的55

}

System.out.println(sb.toString());//列印[email protected]@[email protected]@

m.appendTail(sb);//將最後一次替換後的字串加上

System.out.println(sb.toString());//列印[email protected]@[email protected]@yy

}

/*

 * 返回結果如下 [email protected]@[email protected]@、[email protected]@[email protected]@yy

 */

public static void main(String argus[]) {

test();

}

}

15JAVARegex執行個體教程                                                         12/11/2008

4、常用的Regex

//email 正確的書寫格式為 [email protected]

static String _email  = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+

([-.]\\w+)*";

//電話 正確格式 012-87654321、0123-87654321、0123-7654321

static String _tel    = 

"\\d{4}-\\d{8}|\\d{4}-\\d{7}|\\d(3)-\\d(8)";

//手機號碼 13187654321 13587654321

static String _phone  = "^[1][3,5]+\\d{9}";

//漢字 中國

static String _chinse = "^[\u4e00-\u9fa5]+$";

//IP 192.168.1.1

static String _ip     = 

"\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}";

//QQ 456789

static String _qq     = "[1-9][0-9]{4,13}";

//郵編 210000

static String _mail   = "[1-9]\\d{5}(?!\\d)";

//社會安全號碼碼 15或者18位

static String _id     = "\\d{15}|\\d{18}";

Regex(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.