閱讀177 返回首頁    go 阿裏雲 go 技術社區[雲棲]


馬士兵 正則表達式的學習(下)

10. replacement

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//字符串的替換
    	Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//啟用不區分大小寫的匹配
    	Matcher m=p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
    	
    	while(m.find()) {
    		p(m.group());
    	}
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}


輸出;

java
Java
JAVa
JaVa
JAVA
Java


package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//字符串的替換
    	Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//啟用不區分大小寫的匹配
    	Matcher m=p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
    	
    	//全部轉換為大寫的JAVA
        p(m.replaceAll("JAVA"));
        
        //單數的JAVA串轉換為大寫的,偶數的JAVA串轉換為小寫的
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

JAVA JAVA JAVA JAVA IloveJAVA you hateJAVA afasdfasdf


package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//字符串的替換
    	Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//啟用不區分大小寫的匹配
    	Matcher m=p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
        
        //單數的JAVA串轉換為大寫的,偶數的JAVA串轉換為小寫的
    	StringBuffer buf=new StringBuffer();
    	int i=0;
    	while(m.find()) {
    		i++;
    		if(i%2==0) {
    			m.appendReplacement(buf, "java");
    		}else {
    			m.appendReplacement(buf, "JAVA");
    		}
    	}
		m.appendTail(buf);//添加尾巴 afasdfasdf
		p(buf);
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:


JAVA java JAVA java IloveJAVA you hatejava afasdfasdf



11.group

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//分組
    	Pattern p=Pattern.compile("(\\d{3,5})[a-z]{2}");//3到5位的數字 兩位的小寫字母
    	String s="123aa-34345bb-234cc-00";
    	Matcher m=p.matcher(s);
    	while(m.find()) {
    		p(m.group());//直接打印出整個正則表達式所表示的子串
    	}
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

123aa
34345bb
234cc


繼續分組

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//分組
    	Pattern p=Pattern.compile("(\\d{3,5})([a-z]{2})");//3到5位的數字 兩位的小寫字母
    	String s="123aa-34345bb-234cc-00";
    	Matcher m=p.matcher(s);
    	while(m.find()) {
    		p(m.group(1));
    	}
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

123
34345
234


package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//分組
    	Pattern p=Pattern.compile("(\\d{3,5})([a-z]{2})");//3到5位的數字 兩位的小寫字母
    	String s="123aa-34345bb-234cc-00";
    	Matcher m=p.matcher(s);
    	while(m.find()) {
    		p(m.group(2));
    	}
    }
    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

aa
bb
cc


14.qulifiers

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//qulifiers
    	Pattern p = Pattern.compile("(.{3,10})[0-9]");
		String s = "aaaa5bbbb6";
		Matcher m = p.matcher(s);
		if(m.find())
			p(m.start() + "-" + m.end());
		else 
			p("not match!");
    	}

    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出;

0-10


 Possessive修改:

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//qulifiers
    	Pattern p = Pattern.compile("(.{3,10}?)[0-9]");
		String s = "aaaa5bbbb6";
		Matcher m = p.matcher(s);
		if(m.find())
			p(m.start() + "-" + m.end());
		else 
			p("not match!");
    	}

    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

0-5

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//qulifiers
    	Pattern p = Pattern.compile("(.{3,10}+)[0-9]");
		String s = "aaaa5bbbb6";
		Matcher m = p.matcher(s);
		if(m.find())
			p(m.start() + "-" + m.end());
		else 
			p("not match!");
    	}

    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

not match!


再度修改:

package com.zzk.cn;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
   	
    	//qulifiers
    	Pattern p = Pattern.compile("(.{3,10}+)[0-9]");
		String s = "aaaa5bbbb69";
		Matcher m = p.matcher(s);
		if(m.find())
			p(m.start() + "-" + m.end());
		else 
			p("not match!");
    	}

    
    public static void p(Object o) {
    	System.out.println(o);
    }
}

輸出:

0-11



說明:

           greedy貪婪的,一次吞進10個字符,最後的字母沒有,一看不行,往外吐一個,正則已經匹配了,到此為止發現已經找到了,正則結束。(默認使用greedy)

           Reluctant勉強的,往往吃最少的,先吃進3個,發現後麵不是數字,仍是a,則再吃一個a,發現後麵是5,是數字,就不吃了,正則結束。

           Possessive,和貪婪的類似,吃進去不往外吐,都沒有的情況下匹配不上。追求效率的時候用。





最後更新:2017-04-02 06:52:15

  上一篇:go android中Parcel中文亂碼的解決:巧用十六進製
  下一篇:go ASP.NET中使用jQGrid