馬士兵 正則表達式的學習(下)
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