您的位置:首页 > 职场人生

黑马程序员——正则表达式

2015-09-21 09:14 537 查看

------- android培训java培训、期待与您交流!
----------

正则表达式

软件包 java.util.regex


用于匹配字符序列与正则表达式指定模式的类。

正则表达式:符合一定规则的表达式。

作用:用于专门操作字符串。

特点:用一些特定的符号来表示一些代码操作,这样就简化书写。

所以学习正则表达式,就是在学习一些特殊符号的使用。

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

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

具体操作功能:
1、匹配:String
matches()方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false.
2、切割:String
split(); 不能用.点直接切割,点是正则表达式的特殊字符,代表任意字符,必须转义\\.。
按照叠词进行切割,为了可以让规则的结果被重用,可以将规则封装成一个组。
用()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。
3、替换:String
replaceAll();
正则表达式的第四个功能。
4、获取:将字符串中符合规则的子串取出。

操作步骤:
1、将正则表达式封装成对象
2、让正则对象和要操作的字符串相关联
3、关联后,获取正则匹配引擎
4、通过引擎对符合规则的子串进行操作,比如取出

图例:





具体操作练习:

对QQ号码进行校验
需求:5~15 0不能开头
只能是数字。
这种方式是使用了String类中的方法进行组合完成了需求,但是代码过于复杂。
class RegexDemo

{

publicstatic void main(String[] args)

{

//splitDemo("wangwu.zhangsa.lisi","\\.");

//splitDemo("c:\\abc\\a.txt",\\\\);

//按照叠词进行切割,为了可以让规则的结果被重用,可以将规则封装成一个组。

//用()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。

//splitDemo("dhfddejioehskkdewew","(.)\\1+");//使用组来切割 1组后面引用前面的字符,前后一致。

//将字符串的的数字替换成#

Stringstr = "wer235433433ty343423434ueihd34354345";

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

//将叠词替换成*

Stringstr1 = "djfkjdkkdfkehkeeeehfkhe";

//replaceAllDemo(str1,"(.)\\1+","*");

//将叠词替换成单个字符,用美元符号去获取组

replaceAllDemo(str1,"(.)\\1+","$1");

}

publicstatic void replaceAllDemo(String str,String Regx,String newStr)

{

str= str.replaceAll(Regx,newStr);

System.out.println(str);

}

publicstatic void splitDemo(String str,String Regx)

{

//StringRegx = " +";//用空格切割

//StringRegx = "\\.";//不能直接用.
必须转义

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

for(Strings : arr)

{

System.out.println(s);

}

}

/*
匹配

手机号段只有 13xxx 15xxx 18xxx

*/

publicstatic void checkTel()

{

Stringtel = "13304638463";

StringtelReg = "1[358]\\d{9}";

System.out.println(tel.matches(telReg));

}

publicstatic void checkQQ_2()

{

Stringqq = "013333";

//Stringregex = "[1-9][0-9]{4,14}";

Stringregex = "[1-9]\\d{4,14}";

booleanflag = qq.matches(regex);

if(flag)

System.out.println("qq:"+qq);

else

System.out.println("出现非法字符");

}

publicstatic void checkQQ_1()

{

Stringqq = "12334354";

intlen = qq.length();

if(len>=5&& len<=15)

{

if(!qq.startsWith("0"))

{

try

{

longl = Long.parseLong(qq);

System.out.println("qq:"+l);

}

catch(NumberFormatException e)

{

System.out.println("出现非法字符");

}

}

else

{

System.out.println("不可以0开头");

}

}

else

{

System.out.println("长度错误");

}

}
}

练习:



网页爬虫(蜘蛛)。
import java.io.*;
import java.util.regex.*;
import java.net.*;
class RegexTest2

{

publicstatic void main(String[] args) throws Exception

{

getMails();

}

publicstatic void getMails() throws Exception

{

URLurl = new URL(http://192.168.1.102:8080/myweb/mail.html);

URLConnectionconn = url.openConnection();

BufferedReaderbufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));

Stringline = null;

Stringmailreg = "\\w+@\\w+(\\.\\w+)+";

Patternp = Pattern.compile(mailreg);

while((line= bufIn.readLine()) != null)

{

Matcherm = p.matcher(line);

while(m.find())

{

System.out.println(m.group());

}

}

}

/*

获取指定文档中的邮件地址

使用获取功能Pattern Matcher

*/

publicstatic void getMails() throws Exception

{

BufferedReaderbufr = new BufferedReader(new FileReader("mail.txt"));

Stringline = null;

Stringmailreg = "\\w+@\\w+(\\.\\w+)+";

Patternp = Pattern.compile(mailreg);

while((line= bufr.readLine()) != null)

{

Matcherm = p.matcher(line);

while(m.find())

{

System.out.println(m.group());

}

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: