java基础_14_正则表达式

正则表达式 ( Pattern )   

用于对字符串进行操作。

 

好处:可以简化对字符串的复杂操作

弊端:符号定义越多,正则越长,阅读性越差

 

注意:在写预定义字符类时 \和字母都是一个整体,\本身是一个转义字符,所以如\d 要写成 \\d  

 

常用功能:

1,匹配 matches(String regex)

匹配过程中只要有一个不符全规则,就结束,返回false 

例:

要求:一串数字  1,长度为5-10    20不能开头   3,帐号只能是数字

    public void method(String qq)
    	{
    		String regex = "[1-9][0-9]{4,9}"; 
    		/*
     意思:第一位数在1-9之间,第二位数在0-9之间,第二位可以有4-9个数字。
    		{}表示数量,看java.util.regex或 matches(String regex)
    */
    		boolean flag = qq.matches(regex);
    		if(flag)
    			System.out.println("qq "+qq);
    		else
    			System.out.println("帐号不对");
    	}

要求:匹配电话号码:开头只能是 13*******;15******;或18*******

String regex = "1[358][0-9]{9}";

或写成String regex = "1[358]\\d{9}"; 

//解说:第一位必须是1,第二位只能是358,第三位开始只能是9位且满足0-9

 

网页爬虫(蜘蛛)

       --> 把满足邮箱格式的邮箱给取出来

    public void getMails_2()  throws Exception
    {
    		URL url = new URL("http://www.baidu.com");
    
    		URLConnection uc = url.openConnection();  //获取连接
    
    		BufferedReader bufr = 
    			new BufferedReader(new InputStreamReader(uc.getInputStream()));
    
    		String mailregex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
				
    		Pattern p = Pattern.compile(mailregex);
    
    		String line = null;
    		while ((line=bufr.readLine())!=null)
    		{
    			Matcher m = p.matcher(line);
    			while (m.find())  //按规则,满足返回true,并指向下一位
    			{
    				System.out.println(m.group());
    			}		
    		}
    	}

2,切割 split(String regex)

以一定规则把字符串进行切割。返回字符数组。

例:

String[] arr = str.split(regex);

regex = " +" ;  以一个或多个空格切割

"\\.";   以 . 切割,注意:在正则中.表示任意,所以要加\\转义

"\\\\"    以 \\ 切割

 

以叠词切割  -->  "(.)\\1"   (.)\1 切割 因为放在字符串中,转义所以要写成(.)\\1  

.)是任意的意思\1是一组的意思

 

3,替换 replaceAll(String regex, String replacement)

例:

将字符串中数字连续>=5个的变成一个#

replaceAll(str,"\\d{5,}","#");

 

将叠词 替换成 *

replaceAll(str,"(.)\\1+","*");

 

注意:用()表示分组的意思,$表示保留这个分组

如:我我要要要学学学学   变成:我要学

replaceAll((.)\\1,$1);

$1表示:替换成()这个组里面的。

 

例:将 112.46.33.3  IP地址每段补两个0  如 : 00112.0046.0033.003

replaceAll("([0-9]+)","00$1");

 

使其都保留成3

replaceAll("0*([0-9]{3})","$1");

 

心得:还可以使用替换功能来去掉字符串中不想要的字符

如:我。。。。要学  变成:我要学

str.replaceAll(\\.,””);

 

4,获取 compile 将字符串中的符合规则的子串取出。

操作步骤:

1,将正则表达式封装成对象

Pattern p = Pattern.compile(regex);

 

2,让正则对象和要操作的字符串相关联

Matcher m = p.matcher(str);

 

3,关联后,获取正则匹配引擎

boolean b = m.find(); //将规则作用到字符串上,并进行符合规则的子串查找,有就返回true.

 

4,通过引擎对符合规则的子串进行操作,比如取出

m.group();

例:

找出字符串中单词长度为3的单词

    String str = "ming tian jiu yao   fang jia le ,da jiao-shi";
    
    String regex = "\\b[a-z]{3}\\b";      \b是单词边界
    
    Pattern p = Pattern.compile(regex);
    
    Matcher m = p.matcher(str);
    
    while (m.find()) //如果满足规则,就返回true,并往指向下一个子串
    {
    	System.out.println(m.group());
    	System.out.println("--------"+m.start()+"....."+m.end());//取出单词前后的角下标
    }

 

如何选取所须要的方法?

1,如果只是想知道字符是否对错,用匹配。

2,想要将已有字符变成另一个字符串,用替换。

3,想要按照自定的方式将字符串变成多个子字符串,用切割。

4,想要拿到符合需求的字符串的子串,用获取。

 

心得:在操作字符串的时候,使用正则表达式来完成。很方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值