`

Java正则表达式

阅读更多
public class RegularTest {
	public static void main(String[] args){
		p("str".matches("..."));
		//public String replaceAll(String regex, String replacement)
		//public String replaceFirst(String regex, String replacement)
		p("A00123lB".replaceFirst("\\d","*"));
		p("A00123lB".replaceAll("\\d", "*"));
//		[]表示范围,{}表示长度
//		[0-9]表示在0到9之前的一个数
//		\\d{0,10}表示0到10之间的长度
//		Greedy 数量词
//		X? 		X,一次或一次也没有 
//		X*		X,零次或多次 
//		X+		X,一次或多次 
//		X{n}	X,恰好 n 次 
//		X{n,}	X,至少 n 次 
//		X{n,m} 	X,至少 n 次,但是不超过 m 次
//      "\\" 匹配 反斜线字符(\)
//		"\\".matches("\\\\")  一个\匹配的时候要写四个
//		[abc] a、b 或 c(简单类) 
//		[^abc] 任何字符,除了 a、b 或 c(否定) 
//		[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)(并集[a-z]|[A-Z]) 
//		[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
//		[a-z&&[def]] d、e 或 f(交集) 
//		[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
//		[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 
		
//		. 任何字符(与行结束符可能匹配也可能不匹配) 
//		\d 数字:[0-9] 
//		\D 非数字: [^0-9] 
//		\s 空白字符:[ \t\n\x0B\f\r] 
//		\S 非空白字符:[^\s] 
//		\w 单词字符:[a-zA-Z_0-9] 
//		\W 非单词字符:[^\w] 
//		^ 行的开头 
//		$ 行的结尾 
//		\b 单词边界 
//		\B 非单词边界 
//		p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));这个匹配空白字付(开始是空白,但不是换行,结果是换行)
//		p("hello sir".matches("^h.*r$"));
//		"lan ".matches(".*\\z$") 这样的不能单词边界,要用行的结尾\z
		
//		Reluctant 数量词(这个是勉强的,先用最少的去匹配) 
//		X?? X,一次或一次也没有 
//		X*? X,零次或多次 
//		X+? X,一次或多次 
//		X{n}? X,恰好 n 次 
//		X{n,}? X,至少 n 次 
//		X{n,m}? X,至少 n 次,但是不超过 m 次 
		
//		Possessive 数量词 (这个用来追求效率,直接打最多的,不行的话就不行了)
//		X?+ X,一次或一次也没有 
//		X*+ X,零次或多次 
//		X++ X,一次或多次 
//		X{n}+ X,恰好 n 次 
//		X{n,}+ X,至少 n 次 
//		X{n,m}+ X,至少 n 次,但是不超过 m 次 
//		文字替换(首次出现字符)
//		Pattern pattern = Pattern.compile("正则表达式");
//		Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//		替换第一个符合正则的数据
//		System.out.println(matcher.replaceFirst("Java"));
//
//		文字替换(全部)
//		Pattern pattern = Pattern.compile("正则表达式");
//		Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//		替换第一个符合正则的数据
//		System.out.println(matcher.replaceAll("Java"));
//		去除html标记
//		Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
//		Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
//		String string = matcher.replaceAll("");
//		System.out.println(string);
		
//		截取http://地址
//		截取url
//		Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
//		Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
//		StringBuffer buffer = new StringBuffer();
//		while(matcher.find()){              
//		    buffer.append(matcher.group());        
//		    buffer.append("\r\n");              
//		System.out.println(buffer.toString());
//		}
//                 匹配中文的Regular [\\u4e00-\\u9fa5]
		
		//电子邮件的匹配
		Pattern email = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
		Matcher emailMatcher = email.matcher("langhu@qq.com");
		//Matcher是匹配整个字符串
		//find()找子串,start()找到子串开始的位置,end()找到子串结束的位置,
		//但必须能找到子串才能用start,end这两个方法reset()重置		
		p(emailMatcher.matches());
		
		//appendReplacement()和appendTail()方法
		//忽略大小写Pattern.CASE_INSENSITIVE
		String str = "langhua lanHUA LANghua lANGHUa dsfd LANGHUA T";
		Pattern langhuaParttern = Pattern.compile("langhua", Pattern.CASE_INSENSITIVE);
		Matcher langhuaMatcher = langhuaParttern.matcher(str);
		StringBuffer sb = new StringBuffer();
		int i = 0;
		while(langhuaMatcher.find()){
		    i++;
			if(i%2==0){
				langhuaMatcher.appendReplacement(sb,"xiaolanghua");
			}else{
				langhuaMatcher.appendReplacement(sb,"dalanghua");
			}			
		}
		langhuaMatcher.appendTail(sb);
		p(sb.toString());
		//分组group()返回的是子串
		String num = "123aa-1234aa-12384bb-0-*-*";
		Pattern nump = Pattern.compile("(\\d{3,5})(\\w{2})");
		Matcher numm = nump.matcher(num);
		while(numm.find()){
			p(numm.group(1));
		}
		
		Pattern pattern = Pattern.compile(".{1,3}?\\d");
		Matcher marcher = pattern.matcher("2地3基13ab2cef2");
		if(marcher.find()){
			p(marcher.group());
			p(marcher.start()+"-"+marcher.end());
		}
	}
	public static void p(Object o){
		System.out.println(o);
	}
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics