黑马程序员_正则表达式

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
  正则表达式是指符合一定规则的表达式。它是专门用来操作字符串的。它的特点是用一些特定的符号来表示一些代码的操作,这样做可以简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。它的好处是可以简化对字符串的复杂操作,坏处是符号定义越多,正则越长,阅读性越差。


  字符 
  x 字符 x 
  \\ 反斜线字符 
 \t 制表符 ('\u0009') 
 \n 新行(换行)符 ('\u000A') 
 \r 回车符 ('\u000D') 
 \f 换页符 ('\u000C') 
 \a 报警 (bell) 符 ('\u0007') 
 \e 转义符 ('\u001B') 
 \cx 对应于 x 的控制符 
  
  字符类 
 [abc] a、b 或 c(简单类) 
 [^abc] 任何字符,除了 a、b 或 c(否定) 
 [a-zA-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 非单词边界 
 \A 输入的开头 
 \G 上一个匹配的结尾 
 \Z 输入的结尾,仅用于最后的结束符(如果有的话) 
 \z 输入的结尾 


  Greedy 数量词 
 X? X,一次或一次也没有 
 X* X,零次或多次 
 X+ X,一次或多次 
 X{n} X,恰好 n 次 
 X{n,} X,至少 n 次 
 X{n,m} X,至少 n 次,但是不超过 m 次 


  常用的正则表达式:

 邮件 [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+(较为精确的匹配),\\w+@\\w+(\\.\\w+)+(相对不太精确的匹配)

  代码示例:

class  RegexDemo
{
	public static void main(String[] args) 
	{
		//demo();
		//System.out.println((char)11);
//		checkTel();

		/* "\\.":点 */
		//splitDemo("zhangsan.lisi.wangwu","\\.");
		/* "\\\\":\\ */
		//splitDemo("c:\\abc\\a.txt","\\\\");

		//按照叠词完成切割。为了可以让规则的结果被重用
		//可以将规则封装成一个组。用()完成。组的出现都有编号。
		//从1开始。 想要使用已有的组可以通过  \n(n就是组的编号,这里,组的编号是1)的形式来获取。
		/*
		按照多个连续出现的相同字符来进行切割
		"(.)\\1+":任意字符出现多次
		*/
		//splitDemo("erkktyqqquizzzzzo","(.)\\1+");

		
		//String str = "wer1389980000ty1234564uiod234345675f";
		
		//将字符串中的数字替换成#。		
		//replaceAllDemo(str,"\\d{5,}","#");

		String str1 = "erkktyqqquizzzzzo";
		//将重叠的字符替换成单个字母。zzzz->z
		replaceAllDemo(str1,"(.)\\1+","$1");

		
	}

	/*
	正则表达式的第一个功能:匹配 String  matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
	

	*/
	public static void checkTel()
	{
		String tel = "16900001111";
		//手机号段只有 13xxx 15xxx 18xxxx,11位,全是数字
		String telReg = "1[358]\\d{9}";
		System.out.println(tel.matches(telReg));
	}

	public static void demo()
	{
		String str = "b23a23456789";
		//大小写字母,数字0个或多个
		String reg = "[a-zA-Z]\\d*";

		boolean b= str.matches(reg);
		System.out.println(b);
	}
	public static void checkQQ()
	{
		String qq = "123a454";
		//1-9数字,4位-14位
		String regex = "[1-9]\\d{4,14}";

		boolean flag = qq.matches(regex);
		if(flag)
			System.out.println(qq+"...is ok");
		else
			System.out.println(qq+"... 不合法");

	}

	
	//正则表达式的第二个功能:切割:String split();
	public static void splitDemo(String str,String reg)
	{
		
		//String reg = " +";//按照多个空格来进行切割
		String[] arr = str.split(reg);  
		System.out.println(arr.length);
		for(String s : arr)
		{
			System.out.println(s);
		}
	}

	//正则表达式的第三个功能:替换;如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组
	public static void replaceAllDemo(String str,String reg,String newStr)
	{
		str = str.replaceAll(reg,newStr);

		System.out.println(str);
	}


}
  

  网页爬虫(网页蜘蛛):是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本

  代码示例:

  

import java.io.*;
import java.util.regex.*;
import java.net.*;
import java.util.*;
class RegexTest2 
{
	public static void main(String[] args) throws Exception
	{
		getMails_1();
	}


	public static void getMails_1()throws Exception
	{
		URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");

		URLConnection conn = url.openConnection();

		BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		
		String line = null;

		String mailreg = "\\w+@\\w+(\\.\\w+)+";
		Pattern p = Pattern.compile(mailreg);

		

		while((line=bufIn.readLine())!=null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值