黑马程序员——正则表达式
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());
}
}
}
}
------- 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());
}
}
}
}
相关文章推荐
- java面试题1
- 一个月搞定面试算法,硅谷工程师传授面试技巧
- 黑马程序员-------OC----SEL和IMP
- abstract class和interface的区别
- 剑指Offer面试题:34.翻转单词顺序VS左旋转字符串
- 七个对我最好的职业建议
- java面试题六 float变量合法声明
- java面试题五 十六进制
- java面试四 运算符测试
- 程序员教你如何追女生
- 三个方法增加职场同事信任
- 码农的出路
- 程序员书单及下载,持续整理中
- 两道有趣的面试题(转)
- 黑马程序员——Java之枚举
- 2016年魅族Java研发面试总结
- 黑马程序员——Java之反射机制
- 黑马程序员——单例设计模式
- 《剑指offer》面试题:顺时针打印矩阵
- 唯品会面试被虐